var myvar1 = myvar2 = myvar3的结果是什么?

What is the outcome of: var myvar1 = myvar2 = myvar3?

本文关键字:结果是 是什么 结果 myvar3 myvar1 myvar2 var      更新时间:2023-09-26

我在一些nodejs脚本中看到这样使用变量/对象:

var myvar1 = myvar2 = myvar3;

为什么使用这个,它是什么意思?

计算结果为:

var myvar1 = myvar2 = myvar3;
var myvar1 = myvar3;          // 'myvar2' has been set to 'myvar3' by now
myvar3;                       // 'myvar1' has been set to 'myvar3' by now

它将首先将myvar3赋值给myvar2(没有var,所以可能隐式全局,注意)。

然后将myvar3的值赋给myvar1,因为返回的是设置的值。

再次返回结果,它不会做任何进一步的事情-在最后一行中,myvar3的值没有任何变化。

所以最后它们的值都是一样的

设置myvar2myvar3, myvar1myvar2

我假设myvar3myvar2在这行之前已经声明过了。如果没有,myvar2将是一个全局变量(因为没有var),如果没有定义myvar3,这将给出一个错误。

展开为:

myvar2 = myvar3; // Notice there's no "var" here
var myvar1 = myvar2;

如果:

var myvar3 = 5;
var myvar1 = myvar2 = myvar3;

那么它们都是= 5

myvar1和myvar2都获得myvar3的名称。要计算的第一个表达式是myvar2 = myvar3。这将myvar3赋值给myvar2。该操作的结果是赋值的值,然后将其赋值给myvar1。

这将把变量myvar1和myvar2赋值给myvar3。我不知道他们为什么这样做,但我最好的猜测是他们希望这两个变量是myvar3的相同值。

如前所述,该语句导致所有变量的值为myvar3

我想补充一句:使用这样的语句必须注意作用域,如下所示:

function foo(){
  var c = 1;
  var a = b = c;
  console.log(a,b,c); //=> 1 1 1
  c = 2;
  console.log(a,b,c); //=> 1 1 2
}
console.log(b); //=> 1! [b] is now a variable in the global scope 

和赋值的非基本值(例如,对象引用)

function foo(){
  var c = {};
  var a = b = c;
  c.bar = 2;
  console.log(a.bar,b.bar,c.bar); 
       //=> 1 1 1 (a, b and c point to the same object)
}