В JavaScript ключевое отличие в когда и как определяется this:
this в момент вызова — его значение зависит от того, как функция была вызванаthis в момент создания — они наследуют this из окружающей лексической области видимостиthis в обычной функции меняется в зависимости от контекста вызова:
const obj = {
name: "Alice",
greet: function() {
console.log(this.name); // "Alice" — this = obj
}
};
Если ту же функцию вызвать без контекста (например, как отдельный callback), this станет undefined в строгом режиме или глобальным объектом в остальных случаях.
Стрелочная функция не имеет своего this. Она захватывает this из окружающей области видимости, где она была определена:
const obj = {
name: "Alice",
greet: function() {
setTimeout(() => {
console.log(this.name); // "Alice" — this сохраняется
}, 1000);
}
};
Если бы здесь использовать обычную функцию внутри setTimeout, контекст obj был бы потерян.
thisthisnew выбросит ошибкуОсновное правило: обычные функции определяют this динамически в момент вызова, стрелочные функции наследуют this статически из области видимости определения.
Стрелочные функции определяют свою привязку this в момент создания, наследуя её из лексической области видимости, в то время как обычные функции определяют this в момент вызова на основе того, как они были вызваны.
Новый — ещё не проверен сообществом
Вы