2

I know global variables are created when they are declared outside a function (says W3Schools).

If I create a global variable and edit it in a function, does it become local? Does the new value given by the function become the global value?

1
  • Why dont you test it ? Keep it simple silly :) Commented Jun 4, 2012 at 19:45

4 Answers 4

8

In general, no, editing a global does not make it local:

var myglob = 5;
function incGlob() {
    myglob = myglob + 1;
}

incGlob();
console.log(myglob); // is 6 now

However, if you pass the global variable as an argument, the argument is a local copy:

var myglob = 5;
function incArg(myloc) {
    myloc = myloc + 1;
}

incArg(myglob);
console.log(myglob); // is still 5

Note that objects are passed by reference, so editing the member variables of an argument variable changes the member variables of the original object passed in:

var myglob = { foo:5 };
function editLoc(myloc) {
    myloc.foo = 6;
}

editLoc(myglob);
console.log(myglob.foo); // foo is 6 now

Finally, note that the local variable in editLoc, above, is just a reference. If we try to overwrite the entire object (instead of a member variable), the function simply loses the reference to the original object:

var myglob = { foo:5 };
function clobberLoc(myloc) {
    myloc = { bar:7 };
}

clobberLoc(myglob);
console.log(myglob.foo); // myglob is unchanged...
// ...because clobberLoc didn't alter the object,
// it just overwrote its reference to the object stored in myglob 
Sign up to request clarification or add additional context in comments.

Comments

5

No, editing the global variable will not change the variable's scope. The new value assigned becomes the global value.

http://jsfiddle.net/RtnaB/

myGlobal = 'foo'; // notice no 'var' keyword, implicitly global (DON'T DO THIS)

console.log(myGlobal); // logs 'foo'

var myFunc = function () {
    myGlobal = 'bar';
};

myFunc();

console.log(myGlobal); // logs 'bar'

1 Comment

I prefer window.myGlobal = 'foo' instead of var myGlobal because the use of var is misleading outside of a function... (it is not a lexical variable, but a property and does not work with the same closure rules)
3

Yes.

You will only create a local variable if you use the var keyword to declare it inside a function.

2 Comments

Nope. I just did it. var does nothing. The declared variable inside the function, will still point to the global variable.
@Bear: No; var does create a local scope. Show me a demo.
2

The new value becomes the global value.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.