js:賦值問題

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