3 回答

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超5個(gè)贊
var a = { n : 1};
var b = a;
//語句從左到右執(zhí)行,賦值從右到左。
//執(zhí)行a.x時(shí),a還是指向的是{n:1}的空間。
//賦值a時(shí),a指針指向了{(lán)n:2},a.x中a原來指向的空間{n:1}添加x屬性,指向現(xiàn)在a指向的空間{n:2};
a.x = a = {n: 2};
console.log(a.x); //undefined
console.log(b.x); //{n:2}

TA貢獻(xiàn)1853條經(jīng)驗(yàn) 獲得超6個(gè)贊
應(yīng)該是從右到左的。a.x=a={n:2}
,
先是執(zhí)行a.x
此刻a指向{n:1}
,
然后執(zhí)行 a={n:2}
將a重新指向,
最后執(zhí)行a.x=a
,即{n:1}.x = {n:2}.

TA貢獻(xiàn)1993條經(jīng)驗(yàn) 獲得超6個(gè)贊
其實(shí)這類問題很容易理解,只需要記得變量只是對(duì)象的引用,變量并不是對(duì)象本身。
取值的時(shí)候順著變量找到對(duì)象;
賦值的時(shí)候則改變變量的指向。
所以
對(duì)于
var a = {n: 1}
,想象一個(gè)對(duì)象{n: 1}
放地上,用a
指著它;var b = a
就是b
順著a
找到{n: 1}
,兩者同時(shí)指著它;a.x = a = {n:2}
左往右看,a.x
是對(duì)a
取值,順著a
找到{n: 1}
,再找到其x
屬性等待賦值,第二個(gè)
a
本應(yīng)是取值,但右邊有=
所以繼續(xù)變成了賦值操作,a
指向{n:2}
,a = {n:2}
返回{n:2}
,給了等待賦值的{n: 1}
.x
;alert(a.x)
,順著a
找到{n:2}
,因?yàn)樵?3.2 中a
改變了指向,而{n: 2}
沒有x
屬性;alert(b.x)
,順著b
找到{n: 1}
,{n: 1}
在 3.1 得到了x
,順著x
找到了{n: 2}
。
添加回答
舉報(bào)