en.javascript.info/1-js/06-advanced-functions/03-closure/8-make-army/task.md
Ilya Kantor ab9ab64bd5 up
2017-03-21 14:41:49 +03:00

673 B

importance: 5


Army of functions

The following code creates an array of shooters.

Every function is meant to output its number. But something is wrong...

function makeArmy() {
  let shooters = [];

  let i = 0;
  while (i < 10) {
    let shooter = function() { // shooter function
      alert( i ); // should show its number
    };
    shooters.push(shooter);
    i++;
  }

  return shooters;
}

let army = makeArmy();

army[0](); // the shooter number 0 shows 10
army[5](); // and number 5 also outputs 10...
// ... all shooters show 10 instead of their 0, 1, 2, 3...

Why all shooters show the same? Fix the code so that they work as intended.