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

Ответ

  1. Контекст (this)
    У обычной функции this динамический (зависит от вызова), у стрелочной — лексический (берется из внешней области).

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

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

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

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

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

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