var foo = {n: 1};
var bar = foo;
foo.x = foo = {n: 2};
輸出foo.x
foo.x
undefined
爲什麼呢?
先看前面兩句
var foo = {n: 1};
var bar = foo;
這兩句的意思是定義了foo爲一個對象,並且讓bar指向這個對象。這很簡單。
foo.x = foo = {n: 2};
//等價於
foo.x = (foo = {n: 2});
注意,此時得到foo的成員x,foo這個成員此時指向的還是{n: 1}
這個對象。再計算賦值符右邊,發現此時foo指向的是{n: 2}
。
所以,foo.x指向的是{n: 1}
,所以{n: 1}
這個對象會添加一個x屬性,該屬性的值指向{n: 2}
。
驗證答案
輸出bar
bar
{n: 1, x: {n: 2}}