Что выведет код Middle Области видимости и замыкания обновлено

Замыкание в цикле while

Вопрос

Что выведет код? По строке на каждый вывод.

function makeGroup() {
  let people = [];
  let i = 0;
  while (i < 100) {
    let man = function () { console.log(i); };
    people.push(man);
    i++;
  }
  return people;
}
const group = makeGroup();
group[0]();
group[5]();

Попробуйте сами

Напишите, что выведет код: каждый вывод с новой строки.

Показать ответ и разбор

Коротко

Код выведет: 100, 100. Почему так Отличие от классической задачи с for: там let в заголовке даёт новую привязку на каждую итерацию.

Что выведет

100
100

Разбор

Почему так

Отличие от классической задачи с for: там let в заголовке даёт новую привязку на каждую итерацию. Здесь счётчик объявлен один раз до цикла, и let внутри тела к нему отношения не имеет. Все сто функций замкнуты на одну переменную, к моменту вызова равную ста. Чтобы получить разные значения, нужна либо новая область на итерацию, либо фиксация значения через параметр.

Вывод

100
100

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.