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