代码如下, 请问执行结果
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}。