【轉】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 
版權聲明:本文爲博主原創文章,轉載請附上博文鏈接!

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