我曾经认为上升发生在变量范围的最顶端。也就是说,就像这里一样。由于变量仅在函数中可见,因此,声明将出现在函数的最开头。
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 段所述:
5.如果变量没有定义,那么 一个。如果严格模式 一世。抛出一个参考错误。 湾。获取对全局对象的引用。 C。在全局对象中设置一个属性,其名称对应于变量名,值对应于变量的值。正式用于浏览器,代码
相等的
如果它
a没有在任何地方声明。