> В чем разница function declaration, function expression и стрелочной функции в JavaScript (JavaScript)

Уровень: senior · Роль: frontend · Категория: Технические вопросы

Компании: Kvando Technologies, Soft_Media_Group, РСХБ, Домклик, IT-One, Софт Медиа Групп, Сбер, TYMY, 1221 Systems, SmartWay

Стек: JavaScript

> Пример ответа

Основное различие между этими тремя способами объявления функций в JavaScript - в синтаксисе, поднятии (hoisting) и контексте this.

  1. Function Declaration (объявление функции):

    JAVASCRIPT
    function sum(a, b) { return a + b; }
    • Поднимается полностью (hoisting): можно вызвать до объявления в коде.
    • Имеет собственный контекст this, который определяется вызовом.
    • Всегда имеет имя (обязательно).
  2. Function Expression (функциональное выражение):

    JAVASCRIPT
    const sum = function(a, b) { return a + b; };
    • Не поднимается (только переменная, но не присвоение): вызов до строки с const приведёт к ошибке.
    • Собственный this (как у declaration).
    • Может быть анонимной или именованной (для отладки).
  3. Arrow Function (стрелочная функция):

    JAVASCRIPT
    const sum = (a, b) => a + b;
    • Не поднимается (как expression).
    • Не имеет собственного this - наследует this из внешнего лексического окружения (нельзя изменить через call, apply, bind).
    • Не имеет arguments (используйте rest-параметры).
    • Не может быть использована как конструктор (вызов с new вызовет ошибку).

Ключевой выбор: используйте стрелочные функции для колбэков, чтобы избежать потери контекста, и function declaration/expression, когда нужен динамический this или конструктор.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью