3 回答

TA貢獻(xiàn)1735條經(jīng)驗(yàn) 獲得超5個贊
這就是事情的運(yùn)作方式。在這樣的for循環(huán)頂部聲明的變量僅在當(dāng)前迭代的for塊內(nèi)可見。你可以這樣想:
<loop> {
let i = getCount();
console.log(i) // logs current value of i
}
wheregetCount運(yùn)行遞增的邏輯i。
用 with 聲明的變量let是塊范圍的 -i在外部引用是沒有意義的。如果i 是的外部可見的for,你會想到它的價值是?i對于循環(huán)的每次迭代,您已經(jīng)有了一個單獨(dú)的綁定。有點(diǎn)隨意地選擇這些綁定之一在外面可見是沒有意義的。

TA貢獻(xiàn)1810條經(jīng)驗(yàn) 獲得超4個贊
因?yàn)樗莊or循環(huán)中的局部變量,而不是在循環(huán)之外。如果您已在循環(huán)外聲明它,則可以正確訪問它。
(function() {
let i;
for (i = 0; i < 5; i++) {
console.log(i);
}
console.log(i);
})();

TA貢獻(xiàn)1878條經(jīng)驗(yàn) 獲得超4個贊
如果您不想更改語法,可以使用var.
(function() {
for (var i = 0; i < 5; i++) {
console.log(i);
}
console.log(i);
// this should work.
})()
否則,使用let或聲明的變量const具有所謂的塊范圍,這意味著它僅在定義它的花括號內(nèi)可見。這本質(zhì)上是let和之間的根本區(qū)別var。與聲明的變量var具有函數(shù)范圍(這整個功能是可見的,它的詞匯的定義,它的價值也只是甚至之前undefined)
(function() {
console.log(i); // undefined
var i = 10;
console.log(i); // 10
})();
但是上面的例子只有在沒有"use strict"任何地方時才有效。
添加回答
舉報(bào)