en.javascript.info/1-js/06-advanced-functions/03-closure/10-make-army/task.md
Ilya Kantor 964ed57c42 closure
2019-12-26 14:59:57 +03:00

689 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 do all of the shooters show the same value? Fix the code so that they work as intended.