题目
输出是什么
var a = { n: 1 }
var b = a
a.x = a = { n: 2 }
console.log(a.n, b.n)
console.log(a.x, b.x)
考察点:
在浏览器中,对象属性的赋值操作会先于变量赋值操作执行
分析
- 首先创建了一个对象 a,其 n 属性值为 1。
- 变量 b 被赋值为对象 a 的引用。
- 执行
a.x = (a = { n: 2 })时,会先将a的属性x赋值为undefined,然后再将a的值更新为{ n: 2 }。此时变量 a 指向新的对象{ n: 2 },但 b 仍然指向旧的对象{ n: 1 ,x:{n:2}}。
核心:
a.x = (a = { n: 2 })先将 a.x 赋值为 undefined,再从右向左执行代码。
输出结果:
2 1
undefined { n: 2 }