javascript新特性let,function*,yield,promise
自從去了百度就好久沒有更新部落格了,看了以前寫的東東,以前在小公司還是比較閑啊。諷刺的是這次又要換工作去小公司,才想起寫篇博。。。
去了百度後先學了python,然後前面的GG走了,我也不想用python了,就全力轉用nodejs了。
越來越喜歡上JS家族了,最近看了一下ECMA6的新特性,著實又增強了JS的生命力啊。看國外ASMJS大牛的視頻說,JS的作者只用了10天就創造了這門語言。
所以希望ECMA能夠繼續進步。
廢話多了些。下面乾貨來了。注意一下代碼要用node --harmony執行,代碼還要用strict模式運行。
let,其實就是塊級範圍申明變數的var。之前JS的var關鍵字是非塊級範圍的,而是函數級的。
例如arr=[0,1,2],我們經常寫迴圈for(var i=0,len=arr.length; i < len; i++){},其實迴圈後這個i是還可以訪問的2。這樣就很容易汙染環境變數。
如果用了let,for(let i=0,len=arr.length; i
function*,申明建構函式,返回{value:v,done:true_or_false}。建構函式可以調用next來擷取下一個值,可以構造類似於隨機數產生器。
yield和function*一起使用。在構造器函數中,yield可以暫停然後返回當前運算式的值。
例如function a(){yield 1;yield 2;}; var gen=a();console.log(gen.next());console.log(gen.next());console.log(gen.next());,結果是{value:1,done:false},{value:2,done:false},{value:undefined,done:true}.執行了構造a函數的第一行yield 1後,a函數退出並且儲存上下文,當再次執行next時會恢複a函數上下文繼續執行下一行b。
promise,這個非ECMA6特性,HTML5Rocks有篇文章寫得挺好。主要是為瞭解決多層嵌套的問題。將嵌套回調轉化成鏈式調用。