Monday, June 3, 2024
18
rated 0 times [  20] [ 2]  / answers: 1 / hits: 75219  / 14 Years ago, sat, april 10, 2010, 12:00:00

I've read all over the place that global variables are bad and alternatives should be used. In Javascript specifically, what solution should I choose.



I'm thinking of a function, that when fed two arguments (function globalVariables(Variable,Value)) looks if Variable exists in a local array and if it does set it's value to Value, else, Variable and Value are appended. If the function is called without arguments (function globalVariables()) it returns the array. Perhaps if the function is fired with just one argument (function globalVariables(Variable)) it returns the value of Variable in the array.



What do you think? I'd like to hear your alternative solutions and arguments for using global variables.



How you would use globalVariables();



function append(){
globalVariables(variable1,value1); //globalVariables() would append variable1 to it's local array.
};

function retrieve(){
var localVariable1 = globalVariables(variable1); //globalVariables() would return value1.
};

function retrieveAll(){
var localVariable1 = globalVariables(); //globalVariables() would return the globalVariable()'s entire, local [persistently stored between calls] array.
};

function set(){
globalVariables(variable1,value2); //globalVariables() would set variable1 to value2.
};


Is this a Singleton Pattern BTW?



In this specific scenario a function may set a variable at one point in time, and much later another function, maybe when a user submits a form, will need to get that variable. Therefore the first function couldn't pass the variable as an argument to the later function as it would never be called from the first.



Thank you, I appreciate all your help!


More From » global-variables

 Answers
8

The primary reason why global variables are discouraged in javascript is because, in javascript all code share a single global namespace, also javascript has implied global variables ie. variables which are not explicitly declared in local scope are automatically added to global namespace. Relying too much on global variables can result in collisions between various scripts on the same page (read Douglas Crockford's articles).



One way to reduce global variables is to use the YUI module pattern. The basic idea is to wrap all your code in a function that returns an object which contains functions that needs to be accessed outside your module and assign the return value to a single global variable.



var FOO = (function() {
var my_var = 10; //shared variable available only inside your module

function bar() { // this function not available outside your module
alert(my_var); // this function can access my_var
}

return {
a_func: function() {
alert(my_var); // this function can access my_var
},
b_func: function() {
alert(my_var); // this function can also access my_var
}
};

})();


now to use functions in your module elsewhere, use FOO.a_func(). This way to resolve global namespace conflicts you only need to change the name of FOO.


[#97115] Wednesday, April 7, 2010, 14 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
cruz

Total Points: 415
Total Questions: 98
Total Answers: 109

Location: France
Member since Thu, May 6, 2021
3 Years ago
cruz questions
Tue, Sep 14, 21, 00:00, 3 Years ago
Fri, Mar 26, 21, 00:00, 3 Years ago
Sat, Oct 26, 19, 00:00, 5 Years ago
;