具有以下 for 循环:
for (var i = 0; i < 3; ++i) {
console.log(i, p);
var p;
p = 42;
}
我期望的输出是:
0 undefined
0 undefined
0 undefined
但实际上,输出是:
0 undefined
0 42
0 42
由于我们在下一行使用 var p
(重新声明 p
),为什么 p
在下一行中不(始终)未定义console.log
行?
最佳答案
由于 variable hoisting并且您的变量是函数作用域而不是 block 作用域。
你的for循环被翻译成
var p;
for (var i = 0; i < 3; ++i) {
console.log(i, p);
p = 42;
}
这意味着第一次访问 p 时它是未定义
,
下次它已经在当前函数作用域中初始化,因此它将保留初始化值。
关于javascript - 在循环中重新定义变量不会使其变得未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34782510/