javascript - 函数的执行上下文

时间:2017-11-10 18:05:04

标签: javascript

为什么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

1 个答案:

答案 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.