var a = {n: 1}
var b = a;
a.x = a = {n: 2}
console.log(a.x); //undefined
console.log(b.x); //{n: 2}
如上,a.x 是 undefined , b.x 是 {n: 2} 。
为什么会这样呢,我个人理解是这样的。
先把 {n: 1} 的内存地址看作 地址E , {n: 2}的内存地址看作 地址F
浏览器在看到 a.x = a = {n: 2} 这条语句 ,
就已经确定好了a当时指向的地址是 地址E,在地址E中多了x ,被a.x 指向
然后从右到左执行, 把 a 的地址指向 地址F, 地址E中的 x 指向了 地址F
所以,a的指向地址是 地址F,{n: 2} , 由于b是指向地址E的,b就有了地址E中的x ,{n: 2}