Vandel212
Vandel212

Reputation: 1144

Change global variable value with a local variable

I'm trying to change a global variable by setting it as a parameter in a function. The problem I'm running into is that my global variable does not change when I change the local variable. I understand that the scope of the variables is what's causing this, but I do not know how to make it work. Here is the code I'm using:

    var blnUpgradeGlobal;

    function SelectUpgrade(strUpgradeName, blnUpgradeLocal) {
        if (blnUpgradeLocal) {
            blnUpgradeLocal= false;
            $("#" + strUpgradeName).css("background-color", "#EAC300")
        }
        else {
            blnUpgradeLocal= true;
            $("#" + strUpgradeName).css("background-color", "Lime")
        }
    }

<div id="Upgrade1" onclick="SelectUpgrade(this.id, blnUpgradeGlobal)">
Content
</div>  

So What I'm trying to accomplish here is so that when the user clicks the div, it toggles the boolean global variable set in the onClick event. I don't want to specify the exact variable in the function because I would then need to write a big nested if statement because there are a bunch of upgrades.

Thank you in advance.

Upvotes: 3

Views: 4428

Answers (3)

bfavaretto
bfavaretto

Reputation: 71939

I don't want to specify the exact variable in the function because I would then need to write a big nested if statement because there are a bunch of upgrades

Then your best bet is to have all those global variables wrapped in an object (it's also less pollution in the global namespace). Something like this:

var globalVars = {
    foo: true,
    bar: 1,
    baz: 'foo'
};

Then, in your function, just reference the object (you may pass it instead, if it's not global):

function doStuff(glb) {
    glb.foo = false;
    glb.bar = 2;
}
doStuff(globalVars);

Upvotes: 0

aaronman
aaronman

Reputation: 18771

a global var can be accessed and changed anywhere in the code.
Get rid of the parameter and then use it.
What is happening is that you are passing in the value of the global but only changing the value of the local var because the local namespace is searched first

Upvotes: 3

zerkms
zerkms

Reputation: 255135

There are 2 possible options:

  1. Change the 2nd parameter name (from blnUpgradeLocal to something else) in the function declaration

  2. Change the global variable value using window.blnUpgradeGlobal reference

The former is better

Upvotes: 3

Related Questions