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

Как работает контекст в функции?

Функции

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

Правила определения this при вызове

function show() {
  return this;
}

show();              // undefined (strict) / globalThis
obj.show();          // obj — вызов как метод
new show();          // новый объект
show.call(ctx);      // ctx — явная привязка

Главная идея

this вычисляется динамически. Значение зависит от того, что стоит слева от точки при вызове:

const user = {
  name: 'Ann',
  greet() {
    return this.name;
  },
};

const ref = user.greet;
ref(); // контекст потерян — this не user

Стрелочные функции

У стрелки нет своего this — она берёт его из внешнего лексического окружения в момент создания, поэтому её контекст «фиксирован»:

const obj = {
  items: [1, 2],
  process() {
    return this.items.map((x) => x * this.items.length);
    // стрелка внутри map сохраняет this метода
  },
};

Коротко для собеседования

Контекст функции — this, определяется при вызове: метод → объект слева от точки, new → новый объект, call/apply/bind → заданный, обычный вызов → undefined (strict). Стрелка берёт this из окружения.

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