背景最近在總結(jié)基礎(chǔ)知識(shí),然后看了阮一峰老師的es6教程,其中談及l(fā)et以及塊級(jí)作用域的時(shí)候,舉了一個(gè)經(jīng)典的例子,代碼如下:var a = [];for (var i = 0; i < 10; i++) { // 作用域a
a[i] = function () { // 作用域b
console.log(i);
};
}
a[6](); // 10因?yàn)閑s5不存在塊級(jí)作用域,所以迭代變量i泄露了,然后對(duì)于a數(shù)組內(nèi)每一個(gè)函數(shù)內(nèi)的i都是向上查詢作用域a的,所以結(jié)果是10。這個(gè)沒問題。下面的例子是用let來聲明迭代變量的var a = [];for (let i = 0; i < 10; i++) {
a[i] = function () { console.log(i);
};
}
a[6](); // 6老師是這樣解釋的上面代碼中,變量i是let聲明的,當(dāng)前的i只在本輪循環(huán)有效,所以每一次循環(huán)的i其實(shí)都是一個(gè)新的變量,所以最后輸出的是6。疑問我想不通每一次循環(huán)的i其實(shí)都是一個(gè)新的變量這個(gè)過程是怎么樣的,如果我理解為每次迭代都是新的一個(gè)塊級(jí)作用域,那么迭代變量的迭代(i++)是如何傳遞給下一個(gè)塊級(jí)作用域呢?自知之明雖然我知道結(jié)果,也知道這樣的問題是轉(zhuǎn)牛角尖,就是好奇問問。希望各路英雄指點(diǎn)迷津。
怎么理解for循環(huán)中用let聲明的迭代變量每次是新的變量?
ABOUTYOU
2018-09-05 14:34:31