2016-03-02 30 views
4

我讀過一個變量存儲爲js中的內存引用。是一個變量存儲爲javascript中的內存引用?

因此對於var a = 5,將值爲5的存儲位置分配給a

我試了Node.js的運行以下命令:

var a = 5; 
var b = { 
    val: a 
}; 
a = 6; 

我希望b.val65

如果我運行:

var a = 5; 
var b = { 
    val: a 
}; 
var c = { 
    value: b 
} 
b.val = 6; 

c.value.val6

如果它們都是內存對象,爲什麼輸出有差別?

回答

8

在javascript中,當您將object分配給另一個variable時,它將共享memory reference。它不會創建副本。與此同時,primitive values將與此相反。當它被分配給另一個variable時,它將創建一個副本。

你也需要注意到這個奇怪的情況,

var x = { a: 10 }; 
var y = x; 
x = 5; 

在第一樣子,聽到的對象,大家都(新學生)基本說明之後會告訴,y將包含5。但這是錯誤的。 y將具有較舊的值,即{a:10}。因爲在這種情況下,x的舊參考將被切斷,新值將被分配新的存儲位置。但Y將保留其由x給出的參考。

2

我讀過一個變量存儲爲js中的內存引用。

那麼,是的,所有的變量基本上都是對所有語言的記憶的引用。

因此對於var a = 5,值爲5的存儲位置被分配給a。

我會說「價值5寫入內存位置名稱a」。

我希望b.val爲6,但5

怎麼會這樣? … val: a …表示「從內存位置獲取名稱爲a的值,並創建一個名爲val的屬性,其中存儲的值爲5

在JavaScript中,只有對象是引用更多內存(具體地說,它們各自的屬性)的值,並且傳遞這樣的引用值將始終引用同一組屬性(「對象」)。所有其他值 - 所謂的原始值值 - 只是不可變的值,沒有引用。