2016-08-16 72 views
0

使用JavaScript,如果我有:设置一个变量等于另一个变量是否会导致内存中的Javascript数据重复?

var a = {'x':1, 'y':2}; 
var b = a; 

console.log(a); 
console.log(b); 

...那么A和B都将打印同样的事情。我的理解是,a和b都指向内存中的相同数据。但是,如果我这样做:

a = {}; 
console.log(b); 

...然后b仍然有原来的对象,即使a是一个空的对象了。我想确保如果我设置了一个像上面这样的变量,就不会有内存中对象的重复副本。 var b = a。在某些语言中,给a赋予新值会对b产生连锁效应,因为它们都指向内存中的相同数据。

我很困惑,因为设置a = {}也不会将b设置为空对象。他们是否真的指向相同的数据直到我设置了a = {}

+0

呃,如果a == b那么我们说的是复制的数据,还是我误会了你? –

+0

说实话,我认为你已经回答了你自己的问题... – timothyclifford

+0

嗯,我想是这样,但我只想确定,我希望有人会理解Javascript引擎或有更多的语言经验比我可以证实的。正如我所说的,设置'a = {}'不会将'b'设置为相同的事实让我感到困惑。 – RTF

回答

3

下面3个图像会给你发生了什么这里 enter image description here

enter image description here

enter image description here

+0

哇你真的这么做吗? Kuddos – Dellirium

+0

是的,这就是我所希望的,谢谢! – RTF

+0

@Dellirium:是的,我没有:) – Oxi

0

gif只是说明它是如何工作的。你的情况是第二种情况,按值传递:)

+2

虽然链接到外部引用的答案很好,但答案本身应该包含链接中的所有相关或引用信息,以便答案是自包含的。 – crashmstr

+0

它通过引用传递,而不是值。我处于一种轻微的震惊状态,目前不想听起来很粗鲁。 – Dellirium

0

在你的NO的情况,只有当你使用原始的值(如字符串,数字,布尔值等),然后当您设置b =两个变量都位于单独的内存地址中时。当你使用对象时,你通过引用使用,这意味着这两个变量指向内存中的相同点。

不要害怕使用Chrome开发者工具进行实验,这些类型的东西......它是学习JavaScript最佳实践...

相关问题