Javascript多重任务说明?
看var a=b=1;
,我已经知道a
和b
都有相同的价值。
但我的问题是:
a
从1
还是从b
获得它的值?
我做了一个小测试 :
/*1*/ (function (){
/*2*/ var j = window.j = function (){ alert('3');};
/*3*/ window.j2 = j;
/*4*/ })();
/*5*/
/*6*/ window.j(); //3
/*7*/ window.j=null;
/*8*/ window.j2();//3
正如你可以看到第8行产生3
所以我认为a
不是b
的值,而是1
的值。
我对吗 ?
可视化:
(function (){
var j = window.j = function (){ alert('3');};
|
| ^ ^
| | | //which one ?
+----------+--------+
})();
JavaScript中的作业从右到左起作用。 所以你从window.j
获得了你的价值。 重新设置window.j
不会影响结果,因为Javascript变量总是按值传递,异常是数组或对象。
通过JS对象中的ref传递值的示例:
var obj = { x: 2 };
var anotherObj = obj;
anotherObj.x++;
alert(obj.x); //3
您可以在这里找到更多信息。
这个答案中有更多有用的例子。
“=”运算符与右侧相关联,因此“a = b = 1”等同于“a =(b = 1)”。 所以1先分配给b,结果为1,然后分配给a。
JavaScript中的分配是正确的关联,所以你是正确的。 在
a = b = c;
a
需要的值b
在转让的时间,因此,如果b
在后面分配给别的东西, a
保留其值(这恰好是一样c
)