我在一些nodejs脚本中看到过像这样使用的变量/对象:
var myvar1 = myvar2 = myvar3;
为什么使用这个和它意味着什么?
答案 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
。
我认为在此行之前已声明myvar3
和myvar2
。如果没有,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)
}