Open Sogrey opened 4 years ago
function myFunc() { let a = b = 0; } myFunc();
原因是赋值运算符是从右到左的求值的。这意味着当多个赋值运算符出现在一个表达式中时,它们是从右向左求值的。所以上面代码变成了这样:
function myFunc() { let a = (b = 0); } myFunc();
首先,表达式b = 0求值,在本例中b没有声明。因此,JS引擎在这个函数外创建了一个全局变量b,之后表达式b = 0的返回值为0,并赋给新的局部变量a。
b = 0
b
0
a
我们可以通过在赋值之前先声明变量来解决这个问题。
function myFunc() { let a,b; a = b = 0; } myFunc();
原因是赋值运算符是从右到左的求值的。这意味着当多个赋值运算符出现在一个表达式中时,它们是从右向左求值的。所以上面代码变成了这样:
首先,表达式
b = 0
求值,在本例中b
没有声明。因此,JS引擎在这个函数外创建了一个全局变量b
,之后表达式b = 0
的返回值为0
,并赋给新的局部变量a
。我们可以通过在赋值之前先声明变量来解决这个问题。