0

具有以下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(to redeclare p) 下一行,为什么行中没有pundefined (always) console.log

4

1 回答 1

6

由于变量提升和您的变量是函数范围而不是块范围。

你的 for 循环被翻译成

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

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

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

于 2016-01-14T05:52:31.477 回答