使用局部变量更改全局变量值

时间:2013-06-18 22:10:32

标签: javascript variables

我正在尝试通过将其设置为函数中的参数来更改全局变量。我遇到的问题是当我更改局部变量时,我的全局变量不会改变。我知道变量的范围是造成这种情况的原因,但我不知道如何使其发挥作用。这是我正在使用的代码:

    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>  

所以我在这里要完成的是当用户单击div时,它会切换onClick事件中设置的布尔全局变量。我不想在函数中指定确切的变量,因为我需要编写一个大的嵌套if语句,因为有一堆升级。

提前谢谢。

3 个答案:

答案 0 :(得分:3)

有两种可能的选择:

  1. 在函数声明中更改第二个参数名称(从blnUpgradeLocal到其他)

  2. 使用window.blnUpgradeGlobal参考

  3. 更改全局变量值

    前者更好

答案 1 :(得分:3)

可以在代码中的任何位置访问和更改全局变量 摆脱参数,然后使用它 发生的事情是你传递的是全局值但只改变了本地var的值,因为首先搜索了本地命名空间

答案 2 :(得分:0)

  

我不想在函数中指定确切的变量,因为我需要编写一个大的嵌套if语句,因为有一堆升级

然后,最好的办法是将所有这些全局变量包装在一个对象中(它在全局命名空间中的污染也较少)。像这样:

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

然后,在你的函数中,只引用该对象(如果它不是全局的,你可以改为传递它):

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