Reputation: 43
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
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
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);
Upvotes: 2
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
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