代码如下, 请问执行结果
var a = {n: 1};
var b = a;
a.x = a = {n: 2};
console.log(a.x)
console.log(b.x)
执行结果和原因
结果是 undefined
和 {n: 2}
。
这段代码可以分解为以下步骤:
- 创建一个对象
a
,属性n
的值为1
。 - 将变量
b
指向a
,b
现在也引用了这个对象。 - 执行赋值语句
a.x = a = {n: 2}
,其中a.x
引用的是对象a
的x
属性,但是此时a
的值被重新赋值为一个新的对象{n: 2}
。 - 所以现在
a
引用的是{n: 2}
,而b
仍然引用原始的对象{n: 1}
,且其x
属性被赋值为{n: 2}
。 - 所以
console.log(a.x)
结果为undefined
,因为a
引用的对象没有x
属性;而console.log(b.x)
结果为{n: 2}
,因为b
引用的对象的x
属性被赋值为{n: 2}
。