> В чем разница function declaration, function expression и стрелочной функции в JavaScript (JavaScript)
Уровень: senior · Роль: frontend · Язык: JavaScript · Категория: Технические вопросы
Компании: Mosline
Стек: Node.js, JavaScript
> Пример ответа
Основное различие - в синтаксисе, поднятии (hoisting) и привязке this.Function Declaration объявляется через function имя() {}. Она всплывает полностью, поэтому её можно вызывать до объявления в коде. this определяется контекстом вызова.
JAVASCRIPTfoo(); // "foo" - работает из-за hoistingfunction foo() { console.log('foo'); }
Function Expression - функция, присвоенная переменной (const bar = function() {}). Она не всплывает (hoisting работает только для переменной, но не для присвоенного значения). this также динамический.
JAVASCRIPTbar(); // TypeError: bar is not a functionconst bar = function() { console.log('bar'); };
Стрелочная функция (const baz = () => {}) - более краткий синтаксис. Главное отличие: она не имеет собственного this, а наследует его из внешнего лексического окружения. Также у неё нет объекта arguments. Не может быть использована как конструктор (без new).
JAVASCRIPTconst obj = {name: 'test',regular: function() { console.log(this.name); }, // 'test'arrow: () => { console.log(this.name); } // undefined (или глобальный объект)};obj.regular();obj.arrow();
Итог: используйте Function Declaration для обычных функций, Function Expression - для анонимных или колбэков, стрелочные - когда нужно сохранить контекст this или для краткости (например, в методах массивов).
> Похожие задачи по JavaScript
Приходилось ли писать Docker файлы и работать с контейнерами
Для чего нужен тип Symbol в JavaScript?
Писали ли вы тесты
Какой сборщик используете
> Похожие задачи по frontend
Расскажите про свой профессиональный путь
Для чего нужен тип Symbol в JavaScript?
Писали ли вы тесты
Какой сборщик используете
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью