是否有一个函数可以更改由JS中的参数给定的全局变量?

时间:2019-02-01 16:22:50

标签: javascript

我正在尝试创建一个更改全局变量的按钮。

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,但这没有任何效果。我认为这只是在更改变量的副本。可以解决这个问题吗?

编辑:它似乎不适用于letlet也可以吗?

2 个答案:

答案 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中,非对象参数是按值传递的,因此您在这里所做的是传递ab的值,而不是对变量本身的引用。相反,您可以按名称引用这些变量,并在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>