本文已参与「新人创作礼」活动,一起开启掘金创作之路
最近被一条前端面试题刷屏,考察的竟然是简单赋值运算符 =。但是这个面试题确实有点东西。来一起看看
var a = {n: 1};
var b = a;
a.x = a = {n: 2};
console.log('a', a.x)
console.log('b', b.x)
这里输出什么呢?
a undefined
b {n: 2}
解析:
// 定义一个字面量对象
var a = {n: 1}
// 将 a 存放的指向 {n: 1} 的地址赋给 b,a 和 b 指向同一个对象({n: 1})
var b = a
// 首先取出 a.x 的地址({n: 1,x: undefind},在对象中新增一个属性),
// 取出 a 的地址,求出最右边表达式的值 (这里是{n: 2}的地址),
// 赋值给 a,将 a = {n: 2} 的返回值也就是 {n: 2} 赋值给 a.x。
a.x = a = {n: 2};