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

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

Компании: Mosline

Стек: Node.js, JavaScript

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

Основное различие - в синтаксисе, поднятии (hoisting) и привязке this.Function Declaration объявляется через function имя() {}. Она всплывает полностью, поэтому её можно вызывать до объявления в коде. this определяется контекстом вызова.

JAVASCRIPT
foo(); // "foo" - работает из-за hoisting
function foo() { console.log('foo'); }

Function Expression - функция, присвоенная переменной (const bar = function() {}). Она не всплывает (hoisting работает только для переменной, но не для присвоенного значения). this также динамический.

JAVASCRIPT
bar(); // TypeError: bar is not a function
const bar = function() { console.log('bar'); };

Стрелочная функция (const baz = () => {}) - более краткий синтаксис. Главное отличие: она не имеет собственного this, а наследует его из внешнего лексического окружения. Также у неё нет объекта arguments. Не может быть использована как конструктор (без new).

JAVASCRIPT
const 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 или для краткости (например, в методах массивов).

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

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