var a={n:1};
var b=a;
a.x=a={m:2};
console.log(a.x;b.x);
----undefind {m:2}----
第一步
var a={n:1};
var b=a;
得到
a={n:1};
b={n:1};
第二步
根据优先级.的优先级大于=,
通过a.x得到,
a={n:1;x:undefind};
b={n:1;x:undefind};
第三步
通过a={m:2}得到
a={m:2};
b={n:1;x:undefind};
第四步
因为a.x=a={m:2}在同一公式中;
先执行的a.x,所以a.x即b.x;然后a的指针才改变为{m:2},即a.x=a为b.x=a;
因为a的指针改变,a.x=undefined;
而在a的指针改变之前,a.x优先级高,先执行,即b.x赋值为{m:1};
最后得值
a.x=undefined;
b.x={m:1}
如果这样写就是另一种结果
var a={n:1};
var b=a;
a={m:2};
a.x=a;
console.log(a.x;b.x);
----{m:2;x:{m:2}} undefined----