javascript执行上下文中的作用域

javascript执行上下文中的作用域,javascript,Javascript,为什么执行上下文不覆盖全局x变量 var x = 10; function z(){ var x = x = 20; } z(); console.log(x); // Why is 10 printed? Shouldn’t it be 20. 这意味着b和c被声明为全局变量,而不是预期的局部变量 例如: var y = 10; function z(){ var x = y = 20; // Global y is overridden. } z(); console.lo

为什么执行上下文不覆盖全局
x
变量

var x = 10;

function z(){
  var x = x = 20;
}
z();
console.log(x); // Why is 10 printed? Shouldn’t it be 20.

这意味着
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

var x = x = 20;
被解释为

var x;
x = (x = 20);
所以全局x不是指向的

function z(){
  var x = x = 20;
}
被解释为

var x;
x = (x = 20);
所以全局x不是指向的

function z(){
  var x = x = 20;
}
由于以下原因,这实际上转化为:

function z(){
  var x;
  x = x = 20;
}
因此,该函数中x的每个实例都引用局部变量,而不是全局变量

var x = 10;
function z(){
  var x = x = 20;
}
z();
console.log(x)
由于以下原因,这实际上转化为:

function z(){
  var x;
  x = x = 20;
}
因此,该函数中x的每个实例都引用局部变量,而不是全局变量

var x = 10;
function z(){
  var x = x = 20;
}
z();
console.log(x)
本地第一个x。第二个x不会被提升,因为我们已经提升了x。因此,x在局部为20,而在全局为10

为了

x将在本地提升,但y不会在本地提升,因为它未声明,因此将泄漏到分配为10的全局范围。全球范围在本地更改为20。这就是为什么你会得到10分

本地第一个x。第二个x不会被提升,因为我们已经提升了x。因此,x在局部为20,而在全局为10

为了


x将在本地提升,但y不会在本地提升,因为它未声明,因此将泄漏到分配为10的全局范围。全球范围在本地更改为20。这就是为什么你会得到10分

欢迎使用JavaScript,其中解释器无序计算表达式。欢迎使用JavaScript,其中解释器无序计算表达式。