После завершения работы функции
makeArmy, значение переменной
i остается равным 10. Соответственно, все функции в массиве будут выводить текущее значение этой переменной, а не то значение, которое было во время создания функции.
Для более позднего использования любого результата или значения/счетчик, существующего только во время работы цикла, следует создать еще одну переменную:
function makeArmy() {
var shooters = [];
for (var i = 0; i < 10; i++) {
var shooter = (function(index){ // Вот тут создается еще одна переменная со значением счетчика
return function() { // функция-стрелок // Возвращаем функцию, которая использует уже не привязанную к счетчику отдельную переменную
console.log(index); // выводит свой номер
};
})(i); // Передаем текущее значение счетчика в новую функцию, вызывая её
shooters.push(shooter);
}
return shooters;
}
var army = makeArmy();