我曾经认为上升发生在变量范围的最顶端。也就是说,就像这里一样。由于变量仅在函数中可见,因此,声明将出现在函数的最开头。
var foo = 1;
function bar() {
//var foo;
if (!foo) {
var foo = 10;
}
console.log(foo);
}
bar();
但是由于某种原因,这里已经声明了一个全局变量,而不是本地变量。
//var a;
function c() {
a = 7;
}
c();
console.log(a);
为什么它有效?
赋值执行抽象操作
PutValue
如规范第 5 段所述:
正式用于浏览器,代码
相等的
如果它
a
没有在任何地方声明。