JavaScript中的全局变量问题

时间:2015-06-10 11:32:22

标签: javascript jquery json

我在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));
}

请参阅上面的示例并进行审核并将问题还原给我。 谢谢!

4 个答案:

答案 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