Назад к вопросам
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 не меняется