2014-05-01 211 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