Es6 中let var和 const 瞭解
阿新 • • 發佈:2018-12-09
1. let
宣告的變數只在它所在的 程式碼塊 有效,超出範圍去引用會報錯。
2. var
命令宣告的變數,在全域性範圍內都有效。
1 var a = []; 2 for (var i = 0; i < 10; i++) { 3 a[i] = function () { 4 console.log(i); 5 }; 6 } 7 a[6](); // 10
此處我是這樣理解的:for
迴圈設定迴圈變數的那部分是一個父作用域,而迴圈體內部是一個單獨的子作用域。
當for迴圈執行到 i=9 迴圈條件成立,執行迴圈體。然後i++ ,i = 10 了,條件不成立迴圈終止;注意此時全域性變數 i 已經確定為 10 .
故當 在for迴圈外邊呼叫函式的時候,執行console.log(i); 永遠都是列印10.
1 var a = []; 2 for (let i = 0; i < 10; i++) { 3 a[i] = function () { 4 console.log(i); 5 }; 6 } 7 a[6](); // 6
此處我是這樣理解的: 變數i
是let
宣告的,當前的i
只在本輪迴圈有效,故每次迴圈 中 i 變數都是一個新的變數。
JavaScript 引擎內部會記住上一輪迴圈的值,初始化本輪的變數i
時,就在上一輪迴圈的基礎上進行計算。
下面兩個例子更加容易理解 let 和 var
1 for (var i = 0; i < 10; i++) { 2 console.log(i); 3 } 4 console.log(i);
列印結果: for迴圈列印 0-9; 第四行 列印 10;
1 for (let i = 0; i < 10; i++) { 2 console.log(i); 3 } 4 console.log(i);
列印結果: for迴圈列印 0-9; 第四行 報錯 i is not defined ;