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"任何地方时才有效。
添加回答
举报