PassFront
  1. PassFront
  2. База знаний
  3. Классы

В чем разница между функциями классическими и стрелочными?

Классы

Классические и стрелочные функции различаются прежде всего работой с `this`, а также наличием `arguments`, возможностью быть конструктором и синтаксисом.

Различия

  • this — классическая получает this при вызове (динамически); стрелка берёт лексически из окружения.
  • arguments — есть у классической; у стрелки нет (используют rest ...args).
  • new — классическую можно вызвать как конструктор; стрелку нельзя (нет prototype).
  • hoisting — Function Declaration всплывает целиком; стрелка (как выражение) — нет.
const obj = {
  name: 'Ann',
  regular() { return this.name; },   // this = obj
  arrow: () => this.name,            // this из окружения (не obj)
};

Где что применять

  • Стрелки — колбэки, методы массива, обработчики внутри классов (сохранить внешний this).
  • Классические — методы объектов (нужен свой this), конструкторы, где нужен arguments.
class Timer {
  s = 0;
  start() { setInterval(() => this.s++, 1000); } // стрелка сохраняет this
}

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

Классическая функция имеет свой this (по вызову), arguments, prototype и работает с new. Стрелка берёт this лексически, без arguments/prototype, не конструктор. Стрелки — для колбэков, классические — для методов объектов и конструкторов.

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