解释这个javascript代码

时间:2015-05-19 17:46:09

标签: javascript variables

我对变量赋值有疑问

var foo = {n: 1};

foo.x = foo = {n: 2};

console.log(foo.x) // undefined

为什么foo.xundefined

1 个答案:

答案 0 :(得分:4)

=赋值运算符是右关联运算符,意味着从右到左计算一系列赋值。也就是说,语言对待

x = y = x+2;
好像是写的

x = (y = x+2);

首先为y分配添加结果(5),然后为x分配该分配的值,该值也是5。< / p>

你问题中的第一个例子是同一个故事,但事情有点复杂:

foo.x = foo = { n: 2 };

所做的第一项任务是foo,即该对象文字。但是,之前该语言将确定foo.x的引用值,该引用是原始 foo对象。因此,当对该属性进行右手赋值时,它确实有效,但属性是在旧对象上设置的,而不是新对象!

让我们改变一下这个例子:

var foo = {n: 1}, foo2 = foo;

foo.x = foo = {n: 2};

console.log(foo2.x); // { n: 2 }

该版本保留了对变量foofoo2的原始值的另一个引用。即使在双重作业中覆盖foofoo2也会继续引用原始foo