var myvar1 = myvar2 = myvar3的结果是什么?
What is the outcome of: var myvar1 = myvar2 = myvar3?
我在一些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
的值没有任何变化。
所以最后它们的值都是一样的
设置myvar2
为myvar3
, myvar1
为myvar2
。
我假设myvar3
和myvar2
在这行之前已经声明过了。如果没有,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)
}
相关文章:
- 我的localStorage结果显示了[null,null,“something”]],而不是“”;什么”;
- stub.callsArg(index) from Sinon.JS 是做什么的
- 有人可以向我解释一下代码的JavaScript / Ajax部分是做什么的
- Eloquent JS第5章中的这段代码是做什么的
- JavaScript's替换与document.create()结合的函数-这个代码是做什么的
- Javascript .call() 用法.一个工作案例,一个不是.有什么区别
- 注入jquery会完全改变页面结果——这是一种糟糕的方式
- 网络应用程序是用什么语言编写的
- jQuery 函数 $('#myelement').is('*') 是做什么的
- “window.functionname&&functionname()”是做什么的
- scroll.scrolldisabler是做什么的
- ECMAScript 中的内部属性定义是为了什么
- 表达式 '$.mobile' [未定义] 的结果不是对象
- anObject.prototype.constructor 是做什么的
- 文档易受攻击是做什么的
- 这个伪jquery函数(r)脚本是做什么的
- dojo.empty() / domConstruct.empty() 到底是做什么的
- JavaScript 中的 handle_redirect() 是做什么的
- Function.prototype.toMethod() 是做什么的
- runInNewContext到底是做什么的