0

看着var a=b=1;,我已经知道两者ab具有相同的价值。

但我的问题是:

是从还是从 a获得其价值?1b

我做了一个小测试

/*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 ?
      +----------+--------+  
})();
4

4 回答 4

0

JavaScript中的赋值是正确的关联,所以你是正确的。在

a = b = c;

a取值bat 赋值,所以 ifb稍后赋值给别的东西,a保留它的值(恰好与 相同c

于 2013-09-26T10:37:20.070 回答
0

javascript中的赋值从右到左工作。所以你从window.j. 重新设置window.j不会影响结果,因为 Javascript 变量总是按值传递,异常是数组或对象。

在 JS 对象中通过 ref 传递值的示例:

var obj = { x: 2 };
var anotherObj = obj;
anotherObj.x++;
alert(obj.x); //3 

您可以在此处找到更多信息。

此答案中提供了更多有用的示例。

于 2013-09-26T10:50:42.603 回答
0

“=”运算符关联到右侧,因此“a=b=1”等价于“a=(b=1)”。所以首先将 1 分配给 b,结果为 1,然后将其分配给 a。

于 2013-09-26T10:43:36.740 回答
0

从技术上讲,您是对的,但我认为您对参考/价值分配感到困惑。技术上a确实从中获得了它的价值b但没有提及b因此,如果你这样做b = null,它不会影响a,这就是你在你的例子中看到的。

a继承 的 值,b而不依赖于b仍然存在或稍后当您参考a. 分配从右到左发生,因此实际上读取a = ( b = 1)

于 2013-09-26T10:38:06.637 回答