Как работает контекст в функции?
Функции
Контекст (`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 из окружения.