Raju Chauhan
Raju Chauhan

Reputation: 43

Issues with global variable in JavaScript

My issues with global variable in JavaScript

Hello everyone, I am facing an issues with global variable in JavaScript. My issues as given below.

Why the global variable "g_MobileAssociatedPlans" is getting updated whenever I modifying the other input variable "data".

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

Please see the above example and review it and revert me the issues. Thank you!

Upvotes: 2

Views: 222

Answers (4)

Anil Singh
Anil Singh

Reputation: 4212

Please update your code like below

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

Upvotes: 1

Balachandran
Balachandran

Reputation: 9637

Because you are assigning object not value,it will be assigning object reference, for getting the desired output you have to clone the object

g_MobileAssociatedPlans = JSON.parse(JSON.stringify(data));

Or

g_MobileAssociatedPlans = jQuery.extend({}, data);

Fiddle

Upvotes: 2

Navaneeth
Navaneeth

Reputation: 2584

You are passing the reference. Not value. Only primitive types (like numbers, boolean) can be passed by reference. And, Objects are passed by value. If you don't want reference, clone the object.
The easiest way to clone JSON object is JSON.parse(JSON.stringify(originalObject)).
refer to What is the most efficient way to deep clone an object in JavaScript?

Upvotes: 1

andale
andale

Reputation: 473

That's because objects in JavaScript are passed by reference. More about that. Try Most elegant way to clone a JavaScript object.

Upvotes: 0

Related Questions