Что выведет код Middle Области видимости и замыкания обновлено
Замыкание видит изменения после создания
Вопрос
Что выведет код? По строке на каждый вывод.
function makeAdders() {
const res = [];
let base = 10;
for (let i = 0; i < 2; i++) {
res.push((x) => x + base + i);
}
base = 100;
return res;
}
const [a, b] = makeAdders();
console.log(a(1));
console.log(b(1));
Попробуйте сами
Напишите, что выведет код: каждый вывод с новой строки.
Показать ответ и разбор
Коротко
Код выведет: 101, 102. Обе стрелки замыкают одну и ту же переменную base и свою i (у let в цикле отдельная привязка на итерацию).
Что выведет
101
102
Разбор
Обе стрелки замыкают одну и ту же переменную base и свою i (у let в цикле отдельная привязка на итерацию). К моменту вызова base уже 100, потому что замыкание видит текущее значение переменной, а не значение на момент создания. a(1) это 1 + 100 + 0 = 101, b(1) это 1 + 100 + 1 = 102.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.