JS输出


题目

输出是什么

var a = { n: 1 }
var b = a
a.x = a = { n: 2 }
console.log(a.n, b.n)
console.log(a.x, b.x)

考察点:

在浏览器中,对象属性的赋值操作会先于变量赋值操作执行

分析

  1. 首先创建了一个对象 a,其 n 属性值为 1。
  2. 变量 b 被赋值为对象 a 的引用。
  3. 执行 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 }

文章作者: 高红翔
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 高红翔 !
  目录