PassFront
  1. PassFront
  2. База знаний
  3. Функции

Разбери, можно ли поменять контекст в стрелочной функции: при каких условиях и какие ограничения.

Функции

Контекст (`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.

Другие вопросы раздела