JS局部变量改变全局

时间:2014-05-01 12:49:40

标签: javascript object scope

在下面的脚本中,我无法理解为什么通过更改本地(私有)对象本地来更改对象全局中的属性prop?

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

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

})()

alert("Global = " + global.prop)

我不是要求JS改变全局,但它还是会改变它吗?请帮忙。

1 个答案:

答案 0 :(得分:1)

global的值是对象的引用。

在您的功能中,您将该引用复制到local

然后,您可以更改该对象的prop属性的值。

由于globallocal引用了同一个对象,global.proplocal.prop将始终是相同的值。

有关如何创建对象副本而不是参考副本的详细信息,请参阅this other question