en.javascript.info/01-js/05-functions-closures/05-closures-usage/06-make-army/task.md
Ilya Kantor f301cb744d init
2014-10-26 22:10:13 +03:00

979 B
Raw Blame History

Армия функций

[importance 5]

Следующий код создает массив функций-стрелков shooters. По замыслу, каждый стрелок должен выводить свой номер:

//+ run
function makeArmy() {

  var shooters = [];

  for(var i=0; i<10; i++) {
    var shooter = function() { // функция-стрелок
      alert(i); // выводит свой номер
    };
    shooters.push(shooter);
  }

  return shooters;
}

var army = makeArmy();

army[0](); // стрелок выводит 10, а должен 0
army[5](); // стрелок выводит 10...
// .. все стрелки выводят 10 вместо 0,1,2...9

Почему все стрелки́ выводят одно и то же? Поправьте код, чтобы стрелки работали как задумано. Предложите несколько вариантов исправления.