Sobes.tech
Назад к вопросам
Junior — Middle
68

Как отличается использование стрелочных функций от стандартных функций в JavaScript?

Ответ от нейросети

sobes.tech AI

Что хотят услышать интервьюеры:

Стрелочные функции и обычные функции отличаются в первую очередь тем, как у них работает this. У стрелочных функций this берётся из внешнего контекста, а у обычных — зависит от способа вызова. Также у стрелочных функций нет собственного arguments, и их нельзя использовать как конструктор через new.

Определение:

Стрелочная функция — это компактный синтаксис для объявления функции в JavaScript. Главное отличие от стандартной функции — она не создаёт собственный контекст this, а закрывает его из окружающей области видимости. Это делает её удобной для колбэков и коротких функций, но не всегда подходит для методов объектов и функций, где нужен динамический this.

Пример использования:

const user = {
  name: 'Alex',
  regular() {
    setTimeout(function () {
      console.log('обычная функция:', this.name);
    }, 100);
  },
  arrow() {
    setTimeout(() => {
      console.log('стрелочная функция:', this.name);
    }, 100);
  }
};

user.regular();
user.arrow();

Пояснение кода:

В regular() внутрь setTimeout передаётся обычная функция. У неё свой this, поэтому this.name обычно не указывает на user.
В arrow() передаётся стрелочная функция. Она берёт this из метода arrow(), то есть из объекта user, поэтому this.name будет 'Alex'.

Ключевые моменты:

  • У стрелочных функций нет собственного this, arguments, super и new.target.
  • Стрелочные функции нельзя вызвать через new.
  • Обычные функции удобны, когда нужен динамический this, например в методах объектов или конструкторах.
  • Стрелочные функции удобны для колбэков, map, filter, setTimeout и других коротких функций.
  • У обычной функции this определяется в момент вызова, у стрелочной — в момент создания.
  • Для методов объекта чаще используют обычные функции, а для вложенных колбэков внутри них — стрелочные.