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

Чем отличаются типы функций и как это влияет на код?

Функции

Функции в JavaScript бывают разных типов — обычные, стрелочные, методы, конструкторы, генераторы, асинхронные — и различия влияют на `this`, hoisting и поведение вызова.

Типы функций

Обычные (Declaration/Expression)

Свой this (зависит от вызова), есть arguments, могут быть конструкторами.

Стрелочные

Нет своего this (лексический), нет arguments, не конструкторы. Для колбэков.

Методы объектов/классов

this = объект-владелец при вызове через точку.

Конструкторы (с new)

Создают объекты; this = новый экземпляр.

Генераторы (function*)

Возвращают итератор, приостанавливаются через yield.

function* gen() { yield 1; yield 2; }

Асинхронные (async)

Всегда возвращают промис, разрешают await.

Как различия влияют на код

  • this: обычные — динамический, стрелки — лексический. Ошибка выбора ломает контекст в колбэках.
  • Hoisting: Declaration всплывает целиком, Expression/стрелка — нет.
  • new: стрелки и async/генераторы нельзя вызвать как конструктор.
  • arguments: только у обычных функций.

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

Типы функций: обычные (свой this, arguments, конструктор), стрелочные (лексический this, компактные), методы, конструкторы (new), генераторы (yield), async (промис + await). Различия в this, hoisting и new определяют, где какую применять.

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