Следующий код создает массив функций-стрелков shooters. По замыслу, каждый стрелок должен выводить свой номер:
function makeArmy() {
var shooters = [];
for (var i = 0; i < 10; i++) {
var shooter = function me() {
alert( me.i );
};
shooter.i = i;
shooters.push(shooter);
}
return shooters;
}
var army = makeArmy();
army[0](); // 0
army[1](); // 1
Не понимаю, что тут происходит и в каком порядке. Хотелось бы разобраться по шагам.
Из учебника Кантора:
Функция makeArmy делает следующее:
1. Создаёт пустой массив shooters:
var shooters = [];
2. ....??? Вот тут мне не понятно, что происходит. shooter.i = i; это присваивание происходит один раз или 10 по циклу? В какой момент происходит присваивание значения me.i ?
var shooter = function me() {
alert( me.i );
};
shooter.i = i;
3. Вызов army[5]() – это получение элемента массива (им будет функция), и тут же – её запуск.