输出以下代码的执行结果并解释为什么

217 阅读1分钟

考察的是对象属性赋值的过程

输出的结果是undefined和{n:2},还有a的值是{n:2}

var a = {n: 1};
var b = a;
a.x = a = {n: 2};
console.log(a.x)
console.log(b.x)

个人的理解是按照从右到左解析赋值,第二行a和b共同指向的地址是{n:1},第三行的a.x的优先级高于=,此时的a和b开辟了一个.x的属性的地址,然后执行从右到左解析赋值,此时的a指向{n:2},再把a的指向赋值给a.x,此时的b的值是{n:1,x:{n:2}},由于a指向新地址,没有x属性,所以就是undefined,b.x就是{n:2}