В 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, а затем только записывается.
Алексей Уколов: ну не нравится bind, давайте из inner сделаем класс, и будем хранить примитивы в scope экземпляров? Все равно это эффективней нагромождения замыканий, кмк. Или меня просто ООП так извратило...
Алексей Уколов: Насчёт запроса. Учиться надо по учебникам, в которых о функциях рассказано хорошо и подробно. А не повторять вопросы на одну и ту же тему в миллионный раз.
Евгений Петров: То, что учиться нужно по учебникам, я полностью поддерживаю. Но и вреда в таком вопросе не вижу, тем более, что поисковиком он все-таки легко не ищется, на мой взгляд :)
Алексей Уколов: Это сейчас там ровно один алерт, а будь логика посложней, то делать замыкание на огромную конструкцию уже не так весело. Да и в плане производительности/памяти тоже есть разница. Одна функция просто с множеством разных скопов (это я так утрировано про экземпляры класса) против множества функций с множеством разных скопов.