Выбор ответа Junior Области видимости и замыкания спрашивают часто обновлено

Замыкание и глобальная переменная с тем же именем

Вопрос

Что выведет код?

let v = 'глобальная';
function outer() {
  let v = 'outer';
  return function inner() { return v; };
}
const fn = outer();
v = 'изменённая';
console.log(fn());

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

Выберите вариант, и откроется разбор.

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

Коротко

Правильный ответ: 'outer'. inner ищет v начиная со своего окружения: ближайшая v объявлена в outer и равна 'outer'.

Варианты ответа

  1. 'глобальная'
  2. 'изменённая'
  3. 'outer'правильный ответ
  4. undefined

Разбор

inner ищет v начиная со своего окружения: ближайшая v объявлена в outer и равна 'outer'. Глобальная v затенена, и её изменение на inner не влияет. Варианты с глобальной переменной предполагают, что поиск идёт от места вызова или сразу в глобальную область, но область видимости лексическая. undefined получилось бы, если бы окружение outer уничтожалось после возврата, а замыкание как раз держит его живым.

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

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