【转】JavaScript——连续赋值与求值顺序(var a.x=a={n:2})

例题

var a = {
  n: 1
};
var b = a;
a.x = a = { n: 2 };
alert(a.x); // undefined
alert(b.x); // [object Object]

解析:

a.x = a = { n: 2 };

. 操作符的优先级比 = 高,= 从右向左解析,a.x -> 这时候的a还是原来的a,

a = {
  n: 1,
  x: undefined
};

由于b引用的是当前的a,所以b也相当于

b = {
  n: 1,
  x: undefined
};

然后看

a.x = a = { n: 2 };

“a” 重新赋值,这时的 “a” 已经不是我们认识的 “a” 了,它重新找了地址,指向了新对象 { n: 2 }

a = { n: 2 };

“a” 不是原来的 “a”,但是 “a.x” 还是原来的 “a.x” (a.x的指向在a改变之前就已经牢牢的存下来了)。

被a抛弃的地址 = {
  n: 1,
  x: a的新指向对象
};

此时这个地址里的内容只有 “b” 能找到,因为 “b” 的指针指向了它

b = {
  n: 1,
  x: a的新指向对象
};

所以最后的结果如下:       

b = {
  n: 1,
  x: a的新指向对象
};
a = {
  n: 2
};

a.x = undefined;
b.x = a;


--------------------- 
作者:Liyuxinger 
来源:CSDN 
原文:https://blog.csdn.net/liyuxing6639801/article/details/79170394 
版权声明:本文为博主原创文章,转载请附上博文链接!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章