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