2016-08-16 167 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最佳實踐...

相關問題