js:赋值问题

var foo = {n: 1};
var bar = foo;
foo.x = foo = {n: 2};

输出foo.x

foo.x
undefined

为什么呢?
先看前面两句

var foo = {n: 1};
var bar = foo;

这两句的意思是定义了foo为一个对象,并且让bar指向这个对象。这很简单。

foo.x = foo = {n: 2};
//等价于
foo.x = (foo = {n: 2});

注意,此时得到foo的成员x,foo这个成员此时指向的还是{n: 1}这个对象。再计算赋值符右边,发现此时foo指向的是{n: 2}
所以,foo.x指向的是{n: 1},所以{n: 1}这个对象会添加一个x属性,该属性的值指向{n: 2}

验证答案
输出bar

bar
{n: 1, x: {n: 2}}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章