3 回答

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

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

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