为什么参考= NULL不会影响引用的对象?(Why does reference = null no

2019-09-20 22:20发布

我知道这工作,但我不知道为什么还是后面为什么要制作它的工作这样的理由:

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变成零,但是foo为好。 我喜欢一些帮助理解这一点。

Answer 1:

所不同的是之间的重新绑定和变异操作。

bar[0] = 1

是突变; 它影响的对象bar点。

bar = null

是重新绑定; 它只是影响到识别什么bar手段。



Answer 2:

当你做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 = [20,30] 在第一种情况下,底层的对象,这两个foobar点被改变。 在第二种情况下,底层对象bar到没有触摸最初指出。 相反, bar被更改为指向一个新的对象和之前的对象不感动。



Answer 3:

你有两个指针数组。 酒吧= foo的复制原始的指针。 解引用栏不提领富。

阅读更多@ http://snook.ca/archives/javascript/javascript_pass



Answer 4:

参考,但它的定义就是一个指向某个对象。 当您指定null吧,你只需删除存储在这个“指针” bar ,使其不再指向对象。

想象一下,这是一个地址,写在纸张上。 如果表foobar有它相同的地址和您发出一个命令:去解决写在纸foo ,把东西在房子里,操作完成后,自然地,凡看见任何的床单,并签出该地址,会发现这些变化。 现在你的任务null只是同用橡皮擦从片擦这个地址。 它不触及任何没有其他工作表,也没有房子以任何方式。



Answer 5:

我喜欢把变量标签。 使解释他们更容易。

//Create an array containing 5 and 10, and put the label "foo" on it
var foo = [5, 10];
//Put the label "bar" on the thing with the label "foo"
var bar = foo;      
console.log(foo); //[5, 10]
console.log(bar); //[5, 10]
//Take the thing labeled "bar" (which also has the label "foo") and change the first element to 1
bar[0] = 1;         
console.log(foo); //[1, 10]
//Take the label "bar" and attach it to nothing
bar = null;
console.log(foo); //[1, 10]

VAR富= [5,10]。 VAR条= FOO; 的console.log(FOO); // [5,10]的console.log(巴); // [5,10]栏[0] = 1; 的console.log(FOO); // [1 10]棒= NULL; 的console.log(FOO); // [1 10]



Answer 6:

当你做

var foo = [5, 10];

它创建一个数组的引用,这样

foo --->  [5, 10]

当您指定bar ,以foo ,你现在有

foo --->  [5, 10]

bar ------^

你打电话时

bar[0] = 1;

你得到

foo --->  [1, 10]

bar ------^

其中foobar指向同一个对象。

你打电话时

bar = null;

你现在有

foo --->  [1, 10]


文章来源: Why does reference = null not affect the referenced object?