1. 程式人生 > >Es6 中let var和 const 瞭解

Es6 中let var和 const 瞭解

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
此處我是這樣理解的: 變數ilet宣告的,當前的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 ;