Изменение аргумента функции при каждом вызове функции - PullRequest
0 голосов
/ 17 декабря 2018

Хочу передать аргумент в мою функцию (число - ноль), и каждый раз, когда моя функция вызывается, я хочу увеличить этот аргумент на единицу (чтобы это было arg = 0, затем arg = 1, затем arg = 2и т. д.).

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

var arg = 0
function test(arg) {
    arg += 1;
    console.log(arg)
}

test(arg);
test(arg);

Ответы [ 4 ]

0 голосов
/ 17 декабря 2018

Только потому, что генераторы модные, вот версия генератора:

function* increaseByOne(i) {
    while (true) {
        i++;
        yield i;
    }
}

var gen = increaseByOne(0);

console.log(gen.next().value); //1

console.log(gen.next().value); //2

console.log(gen.next().value); //3

console.log(gen.next().value); //4
0 голосов
/ 17 декабря 2018

Без очистки имен переменных для удобства чтения, это должно работать на основе того, что у вас есть в вопросе.

var arg = 0;

function test(arg) {
   arg += 1;
   console.log(arg);
   return arg
}

arg = test(arg);
arg = test(arg);
0 голосов
/ 17 декабря 2018

Как говорили другие комментаторы, JS - это вызов по значению, поэтому вы не будете редактировать эту локальную переменную.Есть несколько других опций, таких как

var arg = 0;
function test() {
  arg = arg + 1;
  return arg;
}
console.log(test())); // Would output 1
console.log(arg); // Would also output 1
0 голосов
/ 17 декабря 2018

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

function test(arg) {
    ++arg.value;
    console.log(arg.value);
}

var arg = { value: 0 };

test(arg);
test(arg);
...