gpt4 book ai didi

javascript - JavaScript 中的链式赋值和循环引用

转载 作者:数据小太阳 更新时间:2023-10-29 05:00:02 25 4
gpt4 key购买 nike

考虑以下语句:

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

你能解释一下为什么 foo.barundefined 而不是 foo 吗?

最佳答案

在执行赋值运算符时,JS会先计算左边的部分。所以这个

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

被解释为

  1. 评估 foo.bar .这将返回一个引用 {base: Object {n:1}, property:bar} .

  2. 然后评估第二个作业:

    2.1 评估 foo .这将返回一个引用 {base:<scope>, property:foo}

    2.2。评估 {n:2} .这将创建一个新对象。

    2.3 放值:<scope>.foo = {n:2}

    2.4 返回 {n:2}

  3. 将值赋给第一个引用:{n:1}.bar = {n:2} .这运行正常,但旧对象 {n:1}不再可访问,因为 <scope>.foo已经引用了新对象

详情:http://ecma-international.org/ecma-262/5.1/#sec-11.13.1

如果您复制 foo之前,你会看到最左边的 =实际上修改了旧对象:

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

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

document.write(JSON.stringify(foo) + "<br>")
document.write(JSON.stringify(oldFoo) + "<br>")

关于javascript - JavaScript 中的链式赋值和循环引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31881524/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com