我正在尝试创建一个更改全局变量的按钮。
HTML
<script src='script.js'><script>
<button onclick = "myFunction(a)>Increase A</button>
<button onclick = "myFunction(b)>Increase B</button>
JavaScript
var a = 0;
var b = 0;
function myFunction(variable){
variable += 1;
}
我正在尝试增加a / b,但这没有任何效果。我认为这只是在更改变量的副本。可以解决这个问题吗?
编辑:它似乎不适用于let
。 let
也可以吗?
答案 0 :(得分:3)
您可以将这两个变量视为window
对象上的键,然后将变量的名称传递给函数:
var a = 0;
var b = 0;
function myFunction(variable){
window[variable] += 1;
console.log(a,b)
}
<button onclick = "myFunction('a')">Increase A</button>
<button onclick = "myFunction('b')">Increase B</button>
尽管最好使用自己的对象容器,而不要依赖window
:
var myData = {a: 0, b: 0};
function myFunction(variable){
myData[variable] += 1;
console.log(myData.a, myData.b)
}
<button onclick = "myFunction('a')">Increase A</button>
<button onclick = "myFunction('b')">Increase B</button>
答案 1 :(得分:0)
在JavaScript中,非对象参数是按值传递的,因此您在这里所做的是传递a
和b
的值,而不是对变量本身的引用。相反,您可以按名称引用这些变量,并在window
对象上访问它们,如下所示:
JavaScript:
function myFunction(variable){
window[variable] += 1;
console.log(a, b)
}
HTML:
<button onclick = "myFunction('a')">Increase A</button>
<button onclick = "myFunction('b')">Increase B</button>