var a = {n:1};
var b = a; // 持有a,以回查
a.x = a = {n:2};
alert(a.x);// --> undefined
alert(b.x);// --> {n:2}</span>
请问结果为何是这样?
我的理解是连等赋值从右向左运算的,当a被复制为{n:2}之后,
为什么a.x中的a仍然指向{n:1}?
a = a.x = {n:2}和a.x= a = {n:2}的结果是一致的原因是,属性访问表达式优先级高于“=”号,无论哪种赋值方式都是先执行a.x,所以a指向是{n:1},添加属性x之后,被重新赋值{n:2}对象。
原文:点击打开链接