Проверяет понимание различий области видимости имени функционального выражения и лексического this в стрелочных функциях, что важно для корректного написания кода.
Область видимости функции зависит от того, как она объявлена. У функционального выражения (function expression) имя функции, если оно указано, доступно только внутри тела самой функции и не попадает во внешнюю область. Это удобно для рекурсии и отладки, но снаружи такое имя недоступно.
Именованное функциональное выражение создаёт отдельную область видимости для своего имени. Переменная, которой присвоена функция, живёт по обычным правилам var/let/const.
const factorial = function fact(n) {
return n <= 1 ? 1 : n * fact(n - 1); // fact доступно только здесь
};
console.log(typeof fact); // "undefined"
console.log(factorial(5)); // 120
Стрелочная функция не имеет собственного this, arguments, super и new.target. Она берёт this из внешнего лексического окружения. Также у неё нет собственного имени для рекурсии, поэтому для рекурсии используют переменную или именованное функциональное выражение.
const obj = {
value: 42,
regular() { return this.value; },
arrow: () => this.value // this из внешней области
};
console.log(obj.regular()); // 42
console.log(obj.arrow()); // undefined (в модуле) или window.value
Итог: выбирайте стрелочные функции для сохранения лексического this и краткости, а именованные функциональные выражения — когда нужна рекурсия или изоляция имени внутри функции.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию