我正在尝试通过将其设置为函数中的参数来更改全局变量。我遇到的问题是当我更改局部变量时,我的全局变量不会改变。我知道变量的范围是造成这种情况的原因,但我不知道如何使其发挥作用。这是我正在使用的代码:
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语句,因为有一堆升级。
提前谢谢。
答案 0 :(得分:3)
有两种可能的选择:
在函数声明中更改第二个参数名称(从blnUpgradeLocal
到其他)
使用window.blnUpgradeGlobal
参考
前者更好
答案 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);