關於 let 在 for 迴圈中的理解

2022-08-28 20:45:15 字數 520 閱讀 8031

每次閱讀 ecmascript 6 入門 時,關於其中的一塊**,總是不能很好的理解。如下

var a =;

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

}a[6](); //

6

與之對應的 如果使用 var 定義變數 i,最後都是輸出10 ,這個都沒什麼問題,那是因為for不是塊級作用域,變數 i 直接是全域性變數。

我們都知道,在es6中,let 的作用域是塊級的,也就是說,在for迴圈中,每一次的都會重新定義乙個變數 i。這個可以參考阮一峰老師的ecmascript6入門。

要想理解上圖,請先閱讀我的另外兩片部落格 閉包 和 作用域鏈。

從上圖中,我們可以很清晰的看見,不同的函式對應的作用域鏈就不同,也就造成了取到的 i 的值不同。

下面給出 使用 var 定義是的**,就能更好的理解這個問題了。

let和var在for迴圈中的不同表現

var只有函式作用域,沒有塊級作用域 函式作用域的表現 function test test 10 console.log i i is not defined 塊級作用域對var沒有約束 console.log i 10 從上面的 可了解到,塊級作用域對var是沒有約束作用的。let與var不同,...

for迴圈中let和var的區別

先看2段 使用var宣告,得到3個3 var a for var i 0 i 3 i a 0 3a 1 3a 2 3 使用let宣告,得到0,1,2 var a for let i 0 i 3 i a 0 0a 1 1a 2 2這是為什麼呢?首先要知道var 宣告作用域是函式作用域,let宣告的作用...

for迴圈中let和var的區別

對呀初學j ascript的同學來說,變數提公升永遠都是過不去的坎,相信我們都遇到過這種情況,看下面 var var arr for var i 0 i 10 i arr 2 輸出為10變數i是var命令宣告的,在全域性範圍內都有效,所以全域性只有乙個變數i。每一次迴圈,變數i的值都會發生改變,而迴...