javascript - 解释一下这段javascript代码

标签 javascript variables

我有一个关于变量赋值的问题

var foo = {n: 1};

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

console.log(foo.x) // undefined

为什么foo.x未定义

最佳答案

=赋值运算符是右关联的,这意味着赋值链是从右到左计算的。也就是说,语言对待这个

x = y = x+2;

就像写的一样

x = (y = x+2);

首先y分配加法的结果 ( 5 ),然后 x被赋予了该赋值的值,这也是 5 .

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

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 }

该版本保留了对 foo 原始值的另一个引用在变量foo2中。即使foo在双重赋值中被覆盖 foo2会继续引用原文foo .

关于javascript - 解释一下这段javascript代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30332624/

相关文章:

javascript - 你可以迭代并插入数组中的值作为通过wrapAll()插入的div的id吗

javascript - 分配 onFrame() 动画函数在鼠标事件上播放

javascript - loadstart 事件不会在 phonegap 2.9 中为 InAppBrowser 触发

variables - 我应该如何定义包含逗号的 Stylus 哈希值?

variables - `tf.random_normal` 和 `tf.random_normal_initializer` 有什么区别?

python - 从函数返回多个值的最佳方法是什么?

javascript - 如何为日期选择器创建 Kendo 过滤器?

javascript - 从 Firebase 数据库的 JSON 数据中获取值(value)

java正则表达式用{var}次{var}px替换{var}px

python - 如何在其他函数可以在 python 中访问的函数中创建变量?