Что произойдёт с внешним x после forEach(x => x++)?

Будут выведены 10 и 13. Параметр x затеняет внешнюю переменную, а callback без такого параметра изменяет y из внешнего окружения три раза.

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

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

Будут выведены 10 и 13. Параметр x затеняет внешнюю переменную, а callback без такого параметра изменяет y из внешнего окружения три раза.

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

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

Условие

Определите вывод JavaScript:

let x = 10;
[1, 2, 3].forEach(x => x++);
console.log(x);
let y = 10;
[1, 2, 3].forEach(() => y++);
console.log(y);

Ответ

Будут выведены 10 и 13. Параметр x затеняет внешнюю переменную, а callback без такого параметра изменяет y из внешнего окружения три раза.

В первом callback каждый x — локальный параметр, получивший очередное число; инкремент не записывается ни во внешний x, ни в исходный массив. Возвращённое значение callback forEach также игнорируется. Во втором примере имя y разрешается во внешней области видимости, поэтому значение действительно накапливается. Для преобразования элементов в новый массив обычно используют map.

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

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

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

Подробнее