2014-05-01 209 views
0

在下面的腳本中我無法理解爲什麼通過改變本地(私人)對象本地來改變對象全局中的屬性prop?JS局部變量全局變化

var global = {} 
global.prop = "Global init"; 

var ChangeState = (function() {  
var local = global; 
local.prop = "Changed"; // expecting Global init? 

})() 

alert("Global = " + global.prop) 

我不是要求JS改變全局,但它會改變它嗎?請幫忙。

回答

1

global的值是對對象的引用。

在函數內部,您將該引用複製到local

然後,您更改該對象的prop屬性的值。

由於globallocal引用相同的對象,因此global.proplocal.prop將始終是相同的值。

請參閱this other question瞭解如何創建對象的副本而不是參考副本的詳細信息。

+0

謝謝,我想我明白了:-) – user3592714