在循环中重新定义变量不会使其未定义

时间:2016-01-14 05:49:43

标签: javascript loops for-loop redeclaration

拥有以下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

1 个答案:

答案 0 :(得分:6)

由于variable hoisting而你的变量是函数作用域而不是块作用域。

你的for循环被翻译为

var p;
for (var i = 0; i < 3; ++i) {
    console.log(i, p);
    p = 42;
}

这意味着第一次访问p是undefined

下次它已在当前函数范围内初始化,因此它将保持初始值。