← Все вопросы

Что такое стрелочные функции и чем они отличаются от обычных?

Задан 9 месяцев назад1.2к просмотров3 ответа
18

Везде пишут () => {}. Чем это отличается от function? И почему говорят, что у них «другой this»?

3 ответа

35
✓ Принятый ответ — помог автору

Стрелочные функции — это короткая запись + одно важное отличие: у них нет своего this, они берут this из окружающего кода (где объявлены).

Синтаксис:

// обычная
function add(a, b) { return a + b; }
// стрелочная
const add = (a, b) => a + b;

И вот тот самый this. Классический баг с обычной функцией внутри метода:

const timer = {
  seconds: 0,
  start() {
    setInterval(function () {
      this.seconds++; // this тут — НЕ timer, а window/undefined
    }, 1000);
  }
};

Со стрелкой this остаётся объектом timer:

setInterval(() => { this.seconds++; }, 1000); // работает как надо

Поэтому стрелки удобны для колбэков. Но НЕ используй их как методы объекта и как конструкторы (new с ними не работает).

Ivan Ivanov автор: спасибо, принято · 8 месяцев назад
Алиса Сергеева про this в setInterval — прям моя вчерашняя бага 😄 · 8 месяцев назад
13

Если совсем коротко: стрелка не создаёт свой this, а наследует его снаружи. Плюс не имеет arguments и её нельзя вызвать через new.

-5

Это просто более короткий синтаксис.

Иван Кудрявцев не только синтаксис, главное отличие — this · 8 месяцев назад

Ваш ответ

Войдите, чтобы ответить на вопрос.
Поддержать проект