我在变量“c”中定义了一个对象。我还创建了一个传递对象的函数。当我对该变量进行更改时,它也会更改原始对象,但我担心的是为什么下面的给定语句不能使用该对象。 fiddle
function changeParam(x, y, z) {
x = 3;
y = "new string";
z["key2"] = "new";
z["key3"] = "newer";
z = {"new" : "object"};
}
var a = 1,
b = "something",
c = {"key1" : "whatever", "key2" : "original value"};
var m=c;
changeParam(a, b, c);
console.log(c)
console.log(m)
答案 0 :(得分:0)
JavaScript passes object by reference.要按值传递,您需要先克隆它。
在this question中,您可以找到执行此操作的选项。有很多方法可以做到,每个方法都有优点和缺点。取决于你想要的对象你可以选择一个。
最简单的方法是将对象字符串化为JSON并再次解析。 (请注意,您无法在此类对象中保存功能):
var newObject = JSON.parse(JSON.stringify(oldObject));
适用于您的jsfiddle
如果你在项目中使用jquery,你也可以使用“jquery way”:
var newObject = jQuery.extend(true, {}, oldObject);