Будут выведены 10 и 13. Параметр x затеняет внешнюю переменную, а callback без такого параметра изменяет y из внешнего окружения три раза.
Что произойдёт с внешним x после forEach(x => x++)?
Будут выведены 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.