最近出去觀望一下,發現很多人喜歡問es6,所以我決定定期寫一寫關於se6都有哪些好玩的東西,今天先說一下爛大街的let
個人感覺之所有有let還是因爲var有幾點不足之處:
首先是作用域的問題,其次是變量提升
-
var arr = [ ]; for(var i=0; i<10; i++){ arr [i] = () => { console.log(i) } } arr[1]();
先不說原因,繼續向下看:var arr = [ ]; for(let i=0; i<10; i++){ arr [i] = () => { console.log(i) } } arr[1]();
這是因爲let聲明的變量僅僅在自己的塊級作用域起作用,出了這個塊級作用域就不起作用,如果用var聲明,就不是這種情況了,i 的值會影響到各個塊裏面的 i,等循環完後 i 等於10,所有塊的i都變成了10了 - 變量提升,我覺得沒啥可說的就不說了
還有幾點要注意的:
同一個塊級作用域內,不允許重複聲明同一個變量。
函數內不能用let重新聲明函數的參數
用let聲明變量只在塊級作用域起作用,適合在for循環使用(個人理解哈)