在循环中重新定义一个变量不会使它成为未定义的
Redefining a variable in a loop does not make it undefined
具有以下 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 并且您的变量是函数作用域而不是块作用域。
您的 for 循环被转换为
var p;
for (var i = 0; i < 3; ++i) {
console.log(i, p);
p = 42;
}
这意味着第一次访问 p 是 undefined
,
下次它已经在当前函数范围内初始化,所以它会保留初始化值。
具有以下 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 并且您的变量是函数作用域而不是块作用域。
您的 for 循环被转换为
var p;
for (var i = 0; i < 3; ++i) {
console.log(i, p);
p = 42;
}
这意味着第一次访问 p 是 undefined
,
下次它已经在当前函数范围内初始化,所以它会保留初始化值。