gpt4 book ai didi

javascript - 为什么reference = null 不会影响被引用的对象?

转载 作者:行者123 更新时间:2023-11-29 09:55:51 24 4
gpt4 key购买 nike

我知道这行得通,但我不知道为什么或为什么要这样做的原因:

var foo = [5, 10];
var bar = foo;
console.log(foo); //[5, 10]
console.log(bar); //[5, 10]
bar[0] = 1;
console.log(foo); //[1, 10]
bar = null;
console.log(foo); //[1, 10]

我预计不仅 bar 会变为 null,foo 也会变为 null。我希望得到一些帮助来理解这一点。

最佳答案

当您执行 bar = null; 时,只是将某些内容分配给 bar 变量的值。它不影响以前分配给 bar 的内容。该对象继续存在,如果有其他引用它,它会保持事件状态,其值不会受到影响。

当你这样做时:

var foo = [5, 10];
var bar = foo;

您有三个实体。您有一个数组 [5,10] 和两个变量,每个变量都引用了该数组。如果更改数组,那么由于两个变量都指向同一个数组,因此无论通过哪个变量引用数组,您都会看到更改。

但是,如果您设置 bar = null,那只会影响 bar 变量,该变量不再具有对数组的引用。它根本不影响仍然由 foo 指向的数组。

事实上,如果你这样做:

var foo = [5, 10];
var bar = foo;
bar = [20,30];

你会得到同样的结果。在第二行代码之后 barfoo 都指向同一个数组,但是在第三行之后,bar 现在指向一个新数组并且只有 foo 指向原始数组。关键在于认识到使用 bar 修改它指向的对象(如 bar[0] = 1 )与重新分配 bar 的整个值(如 bar = [20,30]。在第一种情况下,foobar 指向的底层对象发生了变化。在第二种情况下,bar 最初指向的底层对象没有被触及。相反,bar 被更改为指向一个新对象,并且未触及先前的对象。

关于javascript - 为什么reference = null 不会影响被引用的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11837556/

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