var a = {n:1};
var b = a;
a.x = a = {n:2};
alert(a.x);// --> undefined
alert(b.x);// --> {n:2}
为什么a.x
会是undefied
?一步步来解析:
- 首先将a变量的指针指向
{n:1}
- 再把b的指针指向a,即
{n:1}
- 先确定a.x 和a这两个变量的指针,如果没有指针则创建,将
a.x
创建为null,然后将{n:2}
从右到左赋值给他们。
问题来了——变量a原先指向的是{n:1}
,a.x指向了对象的新属性,现在变为了{n:1, x:null}
。然后将a重新指向{n:2}
,{n:1, x:null}
的x的指针指向{n:2}
。 - 于是a就变成了
{n:2}
,并没有属性x,故是undefined。 - 而b的指向一直是原本的对象,所以在对象上添加属性,变量b也会显现出来。