Разбери, можно ли поменять контекст в стрелочной функции: при каких условиях и какие ограничения.
Функции
Контекст (`this`) стрелочной функции изменить нельзя: у неё нет своего `this`, она берёт его лексически из окружения при создании, и `call/apply/bind` на это не влияют.
Почему нельзя
Стрелка не имеет собственного this — он фиксируется по месту объявления из внешнего лексического окружения. Методы привязки контекста его игнорируют:
const arrow = () => this;
arrow.call({ a: 1 }); // this НЕ станет { a: 1 }
arrow.apply({ a: 1 }); // тоже нет
arrow.bind({ a: 1 })(); // тоже нет
// this остаётся из окружения созданияЧто это меняет на практике
Плюс
В колбэках внутри методов/классов this не теряется — стрелку удобно использовать:
class Timer {
s = 0;
start() {
setInterval(() => this.s++, 1000); // this = экземпляр, всегда
}
}Минус
Стрелку нельзя переиспользовать с другим this — она не годится там, где контекст должен быть динамическим (методы объекта, обработчики, где this = элемент).
Как «поменять» контекст
Никак напрямую. Единственный способ — влиять на окружение, где стрелка создаётся, либо использовать обычную функцию (у неё this настраивается через call/apply/bind).
Коротко для собеседования
Нет: у стрелочной функции нет своего this — он берётся лексически из окружения создания, и call/apply/bind его не меняют. Это удобно для колбэков (не теряется контекст), но делает стрелки непригодными там, где нужен динамический this.