Search code examples
javascriptvariablesgloballocal

Global variable to local variable in JavaScript


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?


Solution

  • 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