最近我在看一些文章的時候總是會出現 let 這個關鍵字,讓我很是不解。於是查了一些資料才了解那么一點....
下面直接進入正題,關於let的定義:let
允許把變量的作用域限制在塊級域中。與var的區別在於var 聲明要么是全局變量或者是局部變量,而無法變為塊級的(還是無法理解塊級變量)。
直接上代碼:
var list = document.getElementById("list");
for (var i = 1; i <= 5; i++) {
var item = document.createElement("LI");
item.appendChild(document.createTextNode("Item " + i));
let j = i;
item.onclick = function (ev) {
console.log("Item " + j + " is clicked.");
};
list.appendChild(item);
};
結果當聲明 j 為let的時候,每次點擊一個li,每一個li都有自己的事件,輸出結果為:ITem1 is clicked,ITem2 is clicked,ITem3 is clicked,ITem4 is clicked,ITem5 is clicked。
而我再次把let j = i換成 var j = i時候,每點擊一次li輸出結果為:ITem5 is clicked。因為 var j = i 是局部變量,5個內部函數都指向了同一個 j ,而 j 最后一次賦值是5。而當用let聲明后,
j 變成塊級域(也就是花括號中的塊,每進入一次花括號就生成了一個塊級域),所以 5 個內部函數指向了不同的 j 。