@PlasterTom

Как работает решение задачи «армия функций»?

Следующий код создает массив функций-стрелков 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]() – это получение элемента массива (им будет функция), и тут же – её запуск.
  • Вопрос задан
  • 1513 просмотров
Решения вопроса 1
@holymotion
Создаётся массив объектов.
На каждом шаге цикла создаётся новый объект и пушится в массив.
shooter - ссылка на текущий объект.
Каждому из этих объектов создаём свойство i и записываем в него значение на iом шаге.
me.i - это просто обращение к свойству данного объекта, me (в контексте функции) внутренняя переменная, которая ссылается на сам объект.
shooter.i = i - делается на каждом шаге, так как мы хотим, что бы в зависимости от положения объекта у него было своё свойство i с каким-то значением.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы