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=(a={n:2}),
因为.运算符的优先级大于=
所以 真正的执行顺序应该是
1、先声明a对象的x属性 即a.x 等价于 {n:1}.x 就是说定死了后面的等式都是往{n:1}这个对象里存
2、对a赋值,指向{n:2}
3、再对 a.x 赋值 此时因为1 所以 此时的a.x 的 a 指向的是 {n:1}
详情参考 http://www.cnblogs.com/ooooevan/p/6024770.html