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