В консоли появится число 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', а число.