var a = { n : 1}; var b = a; a.x = a = {n: 2}; alert(a.x); alert(b.x); 输出:undefined [object Object]请问:a.x = a = {n: 2}; 该句是如何赋值的?
1 回答
宝慕林4294392
TA贡献2021条经验 获得超8个赞
其实这类问题很容易理解,只需要记得变量只是对象的引用,变量并不是对象本身。
取值的时候顺着变量找到对象;
赋值的时候则改变变量的指向。
所以
对于
var a = {n: 1}
,想象一个对象{n: 1}
放地上,用a
指着它;var b = a
就是b
顺着a
找到{n: 1}
,两者同时指着它;a.x = a = {n:2}
左往右看,a.x
是对a
取值,顺着a
找到{n: 1}
,再找到其x
属性等待赋值,第二个
a
本应是取值,但右边有=
所以继续变成了赋值操作,a
指向{n:2}
,a = {n:2}
返回{n:2}
,给了等待赋值的{n: 1}
.x
;alert(a.x)
,顺着a
找到{n:2}
,因为在 3.2 中a
改变了指向,而{n: 2}
没有x
属性;alert(b.x)
,顺着b
找到{n: 1}
,{n: 1}
在 3.1 得到了x
,顺着x
找到了{n: 2}
。
添加回答
举报
0/150
提交
取消