Обновлять существующие переменные в массиве JavaScript - PullRequest
0 голосов
/ 09 мая 2018

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

В приведенном ниже примере я ожидаю, что все vars будут отображать 777 в консоли, но они показывают 0. Когда массив зарегистрирован, [777,777,777] отображается как ожидалось.

var number1 = 0;
var number2 = 0;
var number3 = 0;

var numbers = [number1, number2, number3];

function updateNumbers() {
  var i;
  for (i = 0; i < numbers.length; i++) {
    numbers[i] = 777;

    console.log(numbers);

    console.log(number1);
    console.log(number2);
    console.log(number3);
  }

}

updateNumbers();

1 Ответ

0 голосов
/ 10 мая 2018

при создании массива вы передаете переменные по значению, а не по ссылке на переменную.

var a = 1;
var b = 2;
var c = 3;
var test = [a, b, c];
console.log(test);

вы можете делать что хотите (вроде), но вам нужно использовать объекты.

var a = {
  value: 1
};
var b = {
  value: 2
};
var c = {
  value: 3
};

var test = [a, b, c];
// test[0] refers to a
// test[1] refers to b
// test[2] refers to c

function updateNumbers() {
  var i;
  for (i = 0; i < test.length; i++) {
    test[i].value = 777;
  }
}

updateNumbers();

console.log(test); // this wont output like in your example
console.log(a.value);
console.log(b.value);
console.log(c.value);
...