gpt4 book ai didi

javascript - 全局对象属性修改可以从函数中进行,但不能重新定义对象本身

转载 作者:行者123 更新时间:2023-11-28 17:49:16 24 4
gpt4 key购买 nike

如何解释这种行为?为什么它打印 {a:10}?

var a = {};

(function b ( a ) {
a.a = 10;
a = null;
})( a );

console.log(a); // { a: 10 }

最佳答案

在 JS 中,对象是通过引用传递的。因此,当您执行 ()(a) 时,您正在将 a 的引用作为参数传递给函数。

现在这个引用作为参数保存在局部变量中。因此,当您更新变量时,您实际上是在覆盖该位置的对象。

诀窍是,当你替换引用时。 a=null,将更新参数变量 a 中的引用,但不会覆盖引用中的对象。所以原来的对象仍然可用,只是没有被引用。

IIFE 之后,当您再次登录时,由于参数变量的范围已结束,因此它被销毁,并且 a 再次指向原始 a

因此,您将得到{a: 10}

关于javascript - 全局对象属性修改可以从函数中进行,但不能重新定义对象本身,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45936187/

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