> Какие есть способы объявления функций в JavaScript и их особенности (JavaScript)
Уровень: senior · Роль: frontend · Категория: Технические вопросы
Компании: Иннотех, YADRO, Kvando Technologies, IT-One, GoInvest, ООО Рокет Тех, TYMY, SmartWay
Стек: JavaScript
> Пример ответа
В JavaScript существует несколько способов объявления функций, каждый со своими особенностями:
- Function Declaration (объявление функции)
JAVASCRIPTfunction sum(a, b) {return a + b;}
-
Поднимается (hoisting) целиком - можно вызвать до объявления.
-
Имеет собственный контекст
this(зависит от вызова). -
Доступна в пределах блока (в строгом режиме) или всей функции.
- Function Expression (функциональное выражение)
JAVASCRIPTconst sum = function(a, b) {return a + b;};
-
Не поднимается - доступна только после присвоения.
-
Может быть анонимной или именованной (для отладки).
-
thisопределяется контекстом вызова.
- Arrow Function (стрелочная функция)
JAVASCRIPTconst sum = (a, b) => a + b;
-
Не имеет собственного
this- наследует из внешнего лексического окружения. -
Не поднимается.
-
Не имеет
arguments(используйте rest-параметры). -
Не может быть использована как конструктор (без
new). -
Компактный синтаксис, особенно для колбэков.
- Метод объекта (сокращённая запись)
JAVASCRIPTconst obj = {sum(a, b) {return a + b;}};
-
Синтаксический сахар для
sum: function(a, b). -
thisуказывает на объект, в котором определён метод.
- Конструктор с
new Function
JAVASCRIPTconst sum = new Function('a', 'b', 'return a + b');
-
Создаётся динамически из строки (опасно, медленно).
-
Не замыкается на внешнюю область видимости - работает в глобальном контексте.
Ключевые различия: hoisting, привязка this, наличие arguments, возможность использования как конструктора. Для колбэков и функционального стиля предпочтительны стрелочные функции, для методов объектов - сокращённая запись, для обычных функций - Function Declaration из-за hoisting.
> Похожие задачи по frontend
Что такое Map и Set в JavaScript
Что такое область видимости (scope) в JavaScript
Что такое call, apply и bind в JavaScript и в чем их разница
В чем разница контекста this в стрелочной и декларативной функции в JavaScript?
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью