ES6 之關鍵字 let

2021-08-15 08:21:48 字數 1843 閱讀 3433

正如大家都熟悉的,我們平時在寫**的時候,用var 宣告乙個變數,除此之外,也再沒有接觸到其它的關鍵字了,不管我們宣告什麼樣型別得變數,都用var 搞定了,很方便,但是es6 告訴你,除了var,還可以試試 let 來宣告變數。

那麼,既然var 方便,為什麼還要let 來宣告,這麼說 var 宣告 一定會有不足的地方。

下面介紹 用 var 的不足之處。

1.先看一段**

var arr = [ ];

for(var i=0; i<10; i++)

}arr [1](); //結果:10

很明顯,我們執行這段**的想要的結果是彈出arr 這個陣列對應索引的值。但發現無論索引是幾 彈出結果都是10。

why ?

繼續執行這段**看看:

var arr = [ ];

for(let i=0; i<10; i++)

}arr[1](); //結果:1

居然彈出了對應索引的值!對比一下兩段**,唯一的不同之處就是迴圈的時候初始化變數 i 是使用let,而不是用var, why ? ?

原來,let宣告的變數僅僅在自己使用的塊級作用域起作用,出了這個塊級作用域就不起作用了。

注意:塊級作用域 即任何一對花括號中的語句都屬於乙個快,在花括號用let 定義的所有變數在花括號外都是不可見的,我們稱之為 塊級作用域。

那麼回到**中,for迴圈含有,也就是含有了塊級作用域,每個變數 i 都只是在自己的作用域起作用,例如:第10次迴圈中的 i 的值不會影響到到第9次迴圈。

ok!2.var 宣告變數會出現「變數提公升「。

what ?

上**:

var a = 1;

(function

())();//結果:undefined

猛的一看,結果不應該是 1 嗎,為什麼會是未定義呢?

原因就在於我們在**塊(函式內)裡面還宣告並定義了乙個變數a,導致變數提公升了,實際的**執行順序是這樣的,認真看完你就明白道什麼叫變數提公升了。

var a = 1;

(function

())();

對比一下兩段**:var a = 2; 這句**被拆分成兩部分:宣告var a ; 和 定義a = 2;而宣告部分被提公升了,到了**塊的前面,執行的時候自己挪到前面了,這就是「變數提公升「,結果就是:先執行宣告,接著就執行alert(a);變數a只是宣告還沒定義,就彈出了undefined了。

那麼,用let關鍵字在**塊就不會被提公升了嗎? 確定以及肯定。

var a = 1;

(function

())(); // 結果:報錯a未定義

那為什麼又報錯了呢,因為用let宣告的變數,在其塊級作用域內是封閉的,是不會受到外面的全域性變數a影響的,並且要先宣告再使用,所以a的值即不是1(因為不受外面的影響),也不是undefined(因為先宣告後使用),更不是2,未宣告定義就使用,那只有報錯了。

注意:let關鍵字要記得先宣告定義再使用。

3.使用let 其它注意點

(1) 同乙個塊級作用域內,不允許重複宣告同乙個變數。

錯誤例項:

(2) 函式內不能用let重新宣告函式的引數
function

say(name)

say('wang');

say()函式內用let重新宣告了name這個引數,no!

小結:用 let 宣告變數只在塊級作用域起作用,適合在 for 迴圈使用,也不會出現變數提公升現象。同乙個**塊內,不可重複宣告的相同變數,不可重複宣告函式內的引數。

後續更新…

ES6語法 let 和 const 關鍵字

我們以前都是使用 var 關鍵字來宣告變數的。在 es6 的時候,多了兩個關鍵字 let 和 const 也是用來宣告變數的只不過和 var 有一些區別。使用 var 的時候重複宣告變數是沒問題的,只不過就是後的會把前面覆蓋掉 var num 100 var num 200通過let宣告變數,之前的...

es6之let,const關鍵字

在es5中沒有塊級作用域,只有函式作用域和全域性作用域,例如不能成為乙個作用域,但在es6中可以 for var i 0 i 4 i console.log i i 4這是因為i是在全域性的,最後列印的是for迴圈裡面最後的結果。用let替換var則結果為not defined。for let i ...

ES6之關鍵字const

const是constant 常量 的縮寫,const和 let一樣,也是用來宣告變數的,但是const是專門用於宣告乙個常量的,顧名思義,常量的值是不可改變的。const的特點 1 不可更改 1 2 const name 張三 name 李四 錯誤,企圖修改常量name 2 只在塊級作用域起作用,...