javascript - JavaScript 中的变量初始化

标签 javascript

var foo = {n: 1};
foo.x = foo = {a: 2};
console.log(foo.x);
// Output -- undefined 

var a = 1;
c = b = a;
console.log(a,b,c);
// Output -- 1, 1, 1

您能解释一下为什么第一个示例返回 undefined 而第二个示例返回 1,1,1 吗?

最佳答案

发生这种情况是因为 javascript 中的表达式是从左到右求值的。

所以在这个表达式中:

foo.x=foo={a:2}

首先 foo 被取消引用,属性 x 被设置为右操作数 foo={a:2} 的目标结果。

然后,在计算右操作数时,foo 值被重新赋值,因此对对象先前实例的引用丢失。

为了演示它,我们可以简单地创建另一个变量来保存它:

var foo = {n:1};
var bar = foo;
foo.x=foo={a:2};
console.log(foo, bar);

关于javascript - JavaScript 中的变量初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43154775/

相关文章:

php - 如何将 php 语句插入 jquery/javascript

javascript - '未捕获的语法错误 : Unexpected token x in JSON at position 1' when trying to parse HTML embeded string JSON

javascript - 为什么我的后端不更新数据库中的关键字数据列

javascript - 位图列表[i]未定义

javascript - 所有字段编辑的单个编辑超链接选项

javascript - Bootstrap - 移动页面的滚动条问题

javascript - 在 Canvas 元素中旋转和移动图像?

javascript - 关闭叠加层后,Youtube视频仍在播放

javascript - 从 Marionette View 使用 Handlebars 模板中定义的 DOM 元素

javascript - 如何通过 bootstrap-sass gem 实现 boostrap 模板