Задать вопрос
@nevro
не пойми кто

В for(var i = 0; i < 5; i++) функция должна писать в массив i, а пишет сразу 5. Почему?

Пример из какой-то статьи.
var myAlerts= [];

for(var i = 0: i < 5; i++)
     myAlerts.push( function inner() { alert(i); } )

myAlerts[0](); //5
myAlerts[1](); //5
myAlerts[2](); //5
myAlerts[3](); //5
myAlerts[4](); //5


Не пойму, почему так. Каждая итерация должна записываться в массив, а записывается только последняя, будто сначала прощёлкивается i, а затем только записывается.
  • Вопрос задан
  • 1463 просмотра
Подписаться 2 Оценить 14 комментариев
Ответ пользователя Илья Шатохин К ответам на вопрос (2)
@iShatokhin
JS developer
Это основы основ JS.

Вы пушите функции, которые позже используют переменную "i", а не примитив. Изучайте замыкания и области видимости.

P.S. Через несколько лет можно будет использовать let (ES6), чтобы избежать такое.
Ответ написан
Комментировать