Почему присвоение значения массиву в цикле for приводит к тому, что массив, имеющий одинаковое значение для каждой итерации при передаче в console.log ()? - PullRequest
2 голосов
/ 09 августа 2010

С учетом следующего кода:

var tmp = [0];
for(var i=0;i<100;i++) {
  tmp[0] = i;
  console.log(tmp);
}

Я ожидаю вывод [0], [1], [2], [3] и т. Д.

Но вместо этого я получаю [99], [99], [99], [99] и т. Д.

Пройдя по коду в отладчике (firebug), я получаю правильный результат [0], [1], [2].

Ответы [ 2 ]

7 голосов
/ 09 августа 2010
console.log(tmp[0])

Когда вы помещаете console.log (tmp), вы регистрируете весь объект массива.Firebug создает только ссылку на объект, а затем, когда вы «смотрите» на объект в firebug, вы смотрите на его текущее состояние (после завершения цикла for).

0 голосов
/ 09 августа 2010

Это интересно.Даже без петли for:

var tmp = [], i = 0;
tmp[0] = i;
console.log(tmp);
i++;
tmp[0] = i;
console.log(tmp);

также производит

[1]
[1]

....Я не знал, что console.log вел себя таким образом.Спасибо @ Джошуа за хорошее объяснение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...