当您这样做时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];
你会有同样的结果。在第二行代码之后都bar
指向foo
同一个数组,但是在第三行之后,bar
现在指向一个新数组并且只foo
指向原来的数组。关键是要意识到使用bar
修改它指向的对象bar[0] = 1
和重新分配 bar 的整个值是有区别的bar = [20,30]
。在第一种情况下,foo
和bar
指向的基础对象发生了变化。在第二种情况下,bar
最初指向的底层对象没有被触及。相反,bar
改为指向一个新对象并且不触及先前的对象。