【发布时间】:2016-01-14 05:49:43
【问题描述】:
有以下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),为什么console.log 行中没有p 未定义(始终)?
【问题讨论】:
-
stackoverflow.com/questions/500431/…,
there is no such thing as block level scope in js. -
@Bharadwaj 实际上,在 ES6 中我们有
let。 -
@IonicăBizău 是的,OP 套件给出的示例是该答案的一部分。
-
您是出于好奇而问这个吗?如果您按照最可能应该的方式在顶部声明变量,那么与提升相关的问题就不会成为问题。通过使用调试器单步执行您的代码,可以很容易地分析这个特定问题。在“执行”第二个
var p;之后,您会注意到p的值没有改变。
标签: javascript loops for-loop redeclaration