我想知道javascript提升是如何为全局变量工作的。
假设我有以下代码片段:
var a = 5;
function print(){
console.warn("a",a,b);
var a = 10;
b=5;
console.warn("a",a);
}
print();
在这种情况下,我得到错误"b未定义"。我想知道为什么Javascript提升不适用于全局变量。我试着寻找这个,但只得到了可变起重的结果。有什么想法吗??
var
语句被挂起。函数声明被挂起。赋值不会被挂起(如果将var
语句与赋值(var foo = 1
)结合,则声明部分会被挂起,但赋值不会)。
您的代码被重新解释为:
function print(){
var b
console.warn("a",a,b); // b is not assigned yet so it's undefined.
var a = 10;
b=5;
console.warn("a",a);
}