如何使用局部变量更改全局变量
How to change global variable using local variables
我正在尝试为我的网站制作一个简单的递增函数,它将处理几个不同的值,这些值将按不同的值递增。我想编写一个全局函数,这样我就不必为每个将要递增的值进行硬编码。
我在手动指定全局变量时让它工作,但对于这个项目,我将需要更改许多变量,所以这不是一个选项。是否可以 return 全局变量的值而不必手动指定要 return 哪些变量?
let minerals = 200;
let mineralTarget = document.querySelector("#minerals");
let mineralGain = 1;
function gain(target, base, gain) {
base += gain;
target.innerHTML = base;
}
window.setInterval(function(){
gain(mineralTarget, minerals, mineralGain);
console.log(minerals);
},250);
我希望每次调用函数时 mineralTarget 都会递增 1,但它没有变化。
Javascript 按值传递数字,这意味着在您的函数中您总是递增原始变量的副本,而不会将更改反映回来。
然而,数组和对象是通过引用传递的。如果你设置了一个属性的对象,这样应该可以达到你想要的效果。试试这个:
let minerals = {
"value": 200,
"target": document.querySelector("#minerals"),
"gain": 1
}
function gain (mineral) {
mineral.value += mineral.gain;
mineral.target.innerHTML = mineral.value;
}
window.setInterval(function () {
gain(minerals);
console.log(minerals.value);
}, 250);
我正在尝试为我的网站制作一个简单的递增函数,它将处理几个不同的值,这些值将按不同的值递增。我想编写一个全局函数,这样我就不必为每个将要递增的值进行硬编码。
我在手动指定全局变量时让它工作,但对于这个项目,我将需要更改许多变量,所以这不是一个选项。是否可以 return 全局变量的值而不必手动指定要 return 哪些变量?
let minerals = 200;
let mineralTarget = document.querySelector("#minerals");
let mineralGain = 1;
function gain(target, base, gain) {
base += gain;
target.innerHTML = base;
}
window.setInterval(function(){
gain(mineralTarget, minerals, mineralGain);
console.log(minerals);
},250);
我希望每次调用函数时 mineralTarget 都会递增 1,但它没有变化。
Javascript 按值传递数字,这意味着在您的函数中您总是递增原始变量的副本,而不会将更改反映回来。
然而,数组和对象是通过引用传递的。如果你设置了一个属性的对象,这样应该可以达到你想要的效果。试试这个:
let minerals = {
"value": 200,
"target": document.querySelector("#minerals"),
"gain": 1
}
function gain (mineral) {
mineral.value += mineral.gain;
mineral.target.innerHTML = mineral.value;
}
window.setInterval(function () {
gain(minerals);
console.log(minerals.value);
}, 250);