Как изменить глобальную переменную, используя локальные переменные - PullRequest
0 голосов
/ 08 января 2019

Я пытаюсь создать для моего сайта простую функцию приращения, которая будет обрабатывать несколько разных значений, которые будут увеличиваться на разные значения. Я хочу написать глобальную функцию, которая не позволит мне жестко кодировать это для каждого значения, которое будет увеличиваться.

Я работал, когда определял глобальные переменные вручную, но для этих проектов мне нужно будет изменить много переменных, так что это не вариант. Можно ли вернуть значения глобальным переменным, не указывая вручную, в какие переменные их возвращать?

        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 при каждом вызове функции, но она не изменяется.

1 Ответ

0 голосов
/ 08 января 2019

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);
...