js 连续赋值详解

225 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路

最近被一条前端面试题刷屏,考察的竟然是简单赋值运算符 =。但是这个面试题确实有点东西。来一起看看

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};