我在JavaScript中使用全局变量的问题
大家好,我在JavaScript中面临全局变量的问题。我的问题如下。
为什么每当我修改其他输入变量“数据”时,全局变量“ g_MobileAssociatedPlans ”都会更新。
var g_MobileAssociatedPlans = "";
$(function () {
var data = { "Item1": "Burger", "Item2": "Soft Drink" };
displayMobileDevices(data);
});
function displayMobileDevices(data) {
g_MobileAssociatedPlans = data;
alert(JSON.stringify(g_MobileAssociatedPlans));
data.Item1 = "Wine";
alert(JSON.stringify(g_MobileAssociatedPlans));
}
请参阅上面的示例并进行审核并将问题还原给我。 谢谢!
答案 0 :(得分:2)
因为您要分配对象而不是值,所以它将分配对象引用,以获取您必须克隆对象的所需输出
g_MobileAssociatedPlans = JSON.parse(JSON.stringify(data));
或强>
g_MobileAssociatedPlans = jQuery.extend({}, data);
<强> Fiddle 强>
答案 1 :(得分:1)
您正在传递参考。没有价值。只能通过引用传递基本类型(如数字,布尔值)。并且,对象按值传递。
如果您不想参考,请克隆该对象
克隆JSON对象的最简单方法是JSON.parse(JSON.stringify(originalObject))
。
请参阅What is the most efficient way to deep clone an object in JavaScript?
答案 2 :(得分:1)
请更新您的代码,如下所示
var g_MobileAssociatedPlans = "";
$(function () {
var data = { "Item1": "Burger", "Item2": "Soft Drink" };
displayMobileDevices(data);
});
function displayMobileDevices(data) {
g_MobileAssociatedPlans = JSON.parse(JSON.stringify(data));
alert(JSON.stringify(g_MobileAssociatedPlans));
data.Item1 = "Wine";
alert(JSON.stringify(g_MobileAssociatedPlans));
}
答案 3 :(得分:0)
那是因为JavaScript中的对象是通过引用传递的。 More about that。试试Most elegant way to clone a JavaScript object。