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

时间:2011-09-22 14:21:06

标签: javascript syntax

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

var myvar1 = myvar2 = myvar3;

为什么使用这个和它意味着什么?

6 个答案:

答案 0 :(得分:4)

它将评估为:

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的值没有任何反应。

所以最后它们具有相同的价值。

答案 1 :(得分:3)

这会将myvar2设置为myvar3,并将myvar1设置为myvar2

我认为在此行之前已声明myvar3myvar2。如果没有,myvar2将是全局的(因为没有var),如果未定义myvar3,则会出错。

这扩展为:

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

答案 2 :(得分:3)

如果:

var myvar3 = 5;

var myvar1 = myvar2 = myvar3;

然后他们都是= 5

答案 3 :(得分:3)

myvar1和myvar2都获得myvar3的名称。 要评估的第一个表达式是myvar2 = myvar3。这将myvar3分配给myvar2。此操作的结果是指定的值,然后将其分配给myvar1。

答案 4 :(得分:1)

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

答案 5 :(得分:1)

如前所述,该语句导致所有变量的值为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)
}