PassFront
  1. PassFront
  2. База знаний
  3. Функции

Какие способы создания функций есть в JavaScript и чем они отличаются?

Функции

В JavaScript функцию можно создать декларацией, выражением, стрелочной записью, как метод объекта или класса и, редко, через конструктор Function. Способы различаются подъёмом, this и возможностью вызова через new.

Function Declaration

function sum(a, b) { return a + b; }

Поднимается целиком: вызвать можно до объявления.

Function Expression

const sum = function (a, b) { return a + b; };

Создаётся при выполнении строки; до неё переменная недоступна (или undefined у var). Имя можно задать самой функции: const f = function inner() {} — оно видно только внутри.

Стрелочная функция

const sum = (a, b) => a + b;

Нет своего this и arguments, нельзя вызвать через new, нет прототипа. Подходит для колбэков.

Метод

const obj = { greet() { return 'hi'; } };

Короткая запись метода; this определяется объектом, у которого вызвана функция.

Генераторы и async

function* создаёт генератор, async function — функцию, возвращающую промис.

Конструктор Function

const sum = new Function('a', 'b', 'return a + b');

Выполняется в глобальной области, не замыкает локальные переменные и не рекомендуется.

Сравнение

  • Подъём: только у Declaration.
  • `this`: у стрелочной берётся из внешней области, у остальных зависит от вызова.
  • `new`: стрелочные функции и методы использовать как конструктор нельзя.

Коротко для собеседования

Declaration поднимается, Expression создаётся на месте выполнения, стрелочная функция не имеет своего this, arguments и не вызывается через new. Выбирают по необходимости контекста и читаемости.

Другие вопросы раздела