← Все вопросы
Что такое стрелочные функции и чем они отличаются от обычных?
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 месяцев назад
Ваш ответ
Войдите, чтобы ответить на вопрос.