为什么z()执行上下文不会覆盖全局x变量?
var x = 10;
function z(){
var x = x = 20;
}
z();
console.log(x); // why is 10 printed? Shouldn’t it be 20.
var a = b = c = 0;
这意味着b和c被声明为全局变量,而不是预期的本地变量。
例如 -
var y = 10;
function z(){
var x = y = 20; // global y is overridden
}
z();
console.log(y); // value is 20
按照上面的逻辑,z =()中的x = x = 20表示x是全局的,它覆盖了局部x变量,但x的全局值仍为10
答案 0 :(得分:4)
函数顶部的内部x
声明为hoisted,并遮盖了外部作用域的x
。您的代码实际上是这样做的:
var x = 10;
function z(){
var x;
x = x = 20;
}
z();
console.log(x); // why is 10 printed? Shouldn’t it be 20.