对象引用类问题:以下代码的执行结果是什么,并解释原因

代码如下, 请问执行结果

var a = {n: 1};
var b = a;
a.x = a = {n: 2};

console.log(a.x) 	
console.log(b.x)

执行结果和原因

结果是 undefined{n: 2}

这段代码可以分解为以下步骤:

  1. 创建一个对象 a,属性 n 的值为 1
  2. 将变量 b 指向 ab 现在也引用了这个对象。
  3. 执行赋值语句 a.x = a = {n: 2},其中 a.x 引用的是对象 ax 属性,但是此时 a 的值被重新赋值为一个新的对象 {n: 2}
  4. 所以现在 a 引用的是 {n: 2},而 b 仍然引用原始的对象 {n: 1},且其 x 属性被赋值为 {n: 2}
  5. 所以 console.log(a.x) 结果为 undefined,因为 a 引用的对象没有 x 属性;而 console.log(b.x) 结果为 {n: 2},因为 b 引用的对象的 x 属性被赋值为 {n: 2}