Сравни способы создания функций и объясни, когда выбирать каждый вариант.
Функции
Функции создают через Function Declaration, Function Expression, стрелочные функции, а также методы, конструкторы, генераторы и `new Function`. Выбор зависит от this, hoisting и назначения.
Способы
Function Declaration
function sum(a, b) { return a + b; }Всплывает целиком, свой this, есть arguments.
Function Expression
const sum = function (a, b) { return a + b; };Привязана к переменной, до инициализации недоступна.
Стрелочная функция
const sum = (a, b) => a + b;Нет своего this/arguments, не конструктор, компактна.
Метод объекта/класса
const obj = { sum(a, b) { return a + b; } };Конструктор (с new), генератор (function*), async
Создают экземпляры / итераторы / промисы соответственно.
Как выбирать
- Колбэк с сохранением
this→ стрелка. - Метод с динамическим
this, доступность до объявления → Declaration/метод. - Условное присваивание, IIFE → Expression.
- Ленивая последовательность → генератор; асинхронность → async.
Избегать new Function — компилирует строку, как eval (небезопасно).
Коротко для собеседования
Способы создания функций: Declaration (всплывает, свой this), Expression (привязана к переменной), стрелка (лексический this, компактна), метод, конструктор, генератор, async. Стрелки — для колбэков, Declaration/методы — где нужен динамический this.