Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What are some of the problems of "Implied Global variables"?

JavaScript: The Good Parts defines these kinds of declarations as bad:

foo = value;

The book says "JavaScript’s policy of making forgotten variables global creates bugs that can be very difficult to find."

What are some of the problems of these implied global variables other than the usual dangers of typical global variables?

like image 385
unj2 Avatar asked Feb 05 '11 20:02

unj2


People also ask

What are the problems with global variables?

Using global variables causes very tight coupling of code. Using global variables causes namespace pollution. This may lead to unnecessarily reassigning a global value. Testing in programs using global variables can be a huge pain as it is difficult to decouple them when testing.

What is the disadvantage of global variables?

Disadvantages of using Global VariablesToo many variables declared as global, then they remain in the memory till program execution is completed. This can cause of Out of Memory issue. Data can be modified by any function. Any statement written in the program can change the value of the global variable.

What are the problems with global variables in JavaScript?

This is because global variables are easily overwritten by other scripts. Global Variables are not bad and not even a security concern, but it shouldn't overwrite values of another variable. On the usage of more global variables in our code, it may lead to a maintenance issue.

Why are global variables considered bad '?

Non-const global variables are evil because their value can be changed by any function. Using global variables reduces the modularity and flexibility of the program. It is suggested not to use global variables in the program. Instead of using global variables, use local variables in the program.


2 Answers

As discussed in the comments on this answer, setting certain values can have unexpected consequences.

In Javascript, this is more likely because setting a global variable actually means setting a property of the window object. For instance:

function foo (input) {
    top = 45;
    return top * input;
}
foo(5);

This returns NaN because you can't set window.top and multiplying a window object doesn't work. Changing it to var top = 45 works.

Other values that you can't change include document. Furthermore, there are other global variables that, when set, do exciting things. For instance, setting window.status updates the browser's status bar value and window.location goes to a new location.

Finally, if you update some values, you may lose some functionality. If, for instance, you set window.frames to a string, for instance, you can't use window.frames[0] to access a frame.

like image 150
lonesomeday Avatar answered Oct 28 '22 15:10

lonesomeday


Global variable make it very difficult to isolate your code, and to reuse it in new contexts.

Point #1: If you have a Javascript object that relies on a global var. you will not be able to create several instances of this object within your app because each instance will change the value of the global thereby overwriting data the was previously written by the another instance. (Unless of course this variable holds a value that is common to all instances - but more often than not you'll discover that such an assumption is wrong).

Point #2: Globals make it hard to take existing pieces of code and reuse them in new apps. Suppose you have a set of functions defined in one file and you want to use them in some other file (in another app). So you extract them to a new file and have that file included in the new app. If these function rely on a global your 2nd app will fail at runtime because the global variable is not there. The dependency on globals is not visible in the code so forgetting these variables (when moving functions to new files) is a likely danger.

like image 33
Itay Maman Avatar answered Oct 28 '22 14:10

Itay Maman