Назад к вопросам
Junior
80
questionbank

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

Sobes Copilot

Получайте ответы в реальном времени

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

sobes.tech AI

Основное различие в том, как они работают с this.

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

Стрелочная функция не имеет своего собственного this. Она лексически наследует this из окружения, в котором была определена.

Другие отличия:

  • arguments объект: Классические функции имеют доступ к объекту arguments, стрелочные — нет (но можно использовать rest-параметры).
  • Конструкторы: Классические функции могут использоваться как конструкторы с оператором new. Стрелочные функции — нет.
  • prototype свойство: Классические функции имеют свойство prototype. Стрелочные — нет.

Пример работы с this:

// Пример с классической функцией
const obj = {
  name: 'Объект',
  greet: function() {
    console.log(this.name); // this ссылается на obj
  }
};

obj.greet(); // Выведет: Объект

const greetFunc = obj.greet;
greetFunc(); // Выведет: undefined (или Window в браузере) - this теряет контекст obj
// Пример со стрелочной функцией
const objArrow = {
  name: 'Объект со стрелкой',
  greet: () => {
    console.log(this.name); // this наследует контекст извне (в данном случае global или Window)
  }
};

objArrow.greet(); // Выведет: undefined (или Имя окна в браузере, если name определено на глобальном уровне)

const greetArrowFunc = objArrow.greet;
greetArrowFunc(); // Выведет: undefined (или Имя окна в браузере) - this не меняется