Как изменяется значение счётчика в разных областях видимости

В консоли появится число 2. bar замыкает локальную переменную counter из foo, а постфиксный ++ преобразует строку '2' в число и возвращает прежнее числовое значение.

Короткий ответ

Что ответить на собеседовании

В консоли появится число 2. bar замыкает локальную переменную counter из foo, а постфиксный ++ преобразует строку '2' в число и возвращает прежнее числовое значение.

Подробный разбор

Ответ с пояснениями

Условие

Необходимо предсказать, какой результат будет выведен функцией console.log(counter++), учитывая правила области видимости переменных в JavaScript.

let counter = '1';
function foo() {
  let counter = '2';
  bar();
  function bar() {
    console.log(counter++);
  }
}

function exec() {
  foo();
}

exec();

Ответ

В консоли появится число 2. bar замыкает локальную переменную counter из foo, а постфиксный ++ преобразует строку '2' в число и возвращает прежнее числовое значение.

После выражения локальный counter внутри foo станет числом 3. Глобальная переменная со строкой '1' не меняется. Функция exec влияет только на порядок вызовов, но не на лексическую область поиска переменной: bar объявлена внутри foo и использует ближайшее внешнее связывание. Результат console.log — не строка '2', а число.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее