var a = {n:1};
var b = a;
a.x = a = {n:2}
console.log(a) // {n: 2}
console.log(b) // {n: 1, x: {n: 2}}
a.n = 3
console.log(b) // {n: 1, x: {n: 3}}
第三行会先执行a.x = undefined
这时候a = b = {n:1, x:undefined}
然后从右往左执行
a = {n:2},这时候会发生写时复制,a与b不再指向同一个对象,这时候的a.x已经是b.x了
这时候a = {n:2},b = {n:1, x:undefined}
最后a.x = a,结果是 b = {n: 1, x: {n: 3}}
网友评论