Что выведет код 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 ошибок.