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

«В чем разница между стрелочной функцией и обычной функцией» — вопрос из категории JavaScript, который задают на 29% собеседований Frontend Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

  1. Контекст (this)
    У обычной функции this динамический (зависит от вызова), у стрелочной — лексический (берется из внешней области).
    const obj = {
      name: 'Test',
      regular: function() { console.log(this.name) }, // 'Test'
      arrow: () => console.log(this.name) // undefined (если не strict mode — window)
    };
  1. arguments
    Обычная функция имеет псевдомассив arguments, стрелочная — нет.

  2. Использование с new
    Обычную можно вызывать как конструктор (new Func()), стрелочную — нельзя.

  3. Синтаксис
    Стрелочные функции короче, особенно для однострочных выражений:

    const sum = (a, b) => a + b; // return не нужен
  1. Привязка super/prototype
    У стрелочных нет prototype, они не подходят для методов класса, где нужен super.

Когда использовать:

  • Стрелочные — для колбэков, сохранения контекста.
  • Обычные — методы объектов/классов, конструкторы, функции с arguments.