----原先以为是这样的---- 首先,a 与 b 变量引用同一对象,然后,新对象{n: 2} 重写变量 a, 创建并赋值给 a 的成员 x,此时 a 与 b 引用的不是同一对象了。 所以,a.x 输出新对象。 b.x 输出 undefined。 ----现在---- 再想了一遍,或许是这样的,首先,ab 引用同一对象,然后 a.x = a = {n: 2} ,这里应该是先在 a 与 b 创建 x ,b.x 和 a.x 都指向 a ,a.x = a 把自己给重写了。于是 a.x 输出 undefined ,b.x 输出 {n: 2}。
新手也来答一下,
属性访问表达式优先级高于“=”号,优先执行a.x={n:2},再执行a={n:2},a的指向变了,此时a中并没有x属性了,而b的指向不便,原来的对象{n:1}被添加了x属性
----原先以为是这样的----
首先,a 与 b 变量引用同一对象,然后,新对象{n: 2} 重写变量 a, 创建并赋值给 a 的成员 x,此时 a 与 b 引用的不是同一对象了。
所以,a.x 输出新对象。 b.x 输出 undefined。
----现在----
再想了一遍,或许是这样的,首先,ab 引用同一对象,然后 a.x = a = {n: 2} ,这里应该是先在 a 与 b 创建 x ,b.x 和 a.x 都指向 a ,a.x = a 把自己给重写了。于是 a.x 输出 undefined ,b.x 输出 {n: 2}。
由ES规范学JavaScript(二):深入理解“连等赋值”问题
该问题已经有啦
请移步
http://segmentfault.com/q/1010000002637728