Когда появляется контекст у функции?
Функции
Контекст (`this`) у функции появляется в момент её вызова, а не при объявлении. До вызова у функции нет фиксированного this.
Главная идея
this — не свойство самой функции, а часть контекста конкретного вызова. Поэтому одна функция при разных вызовах имеет разный this.
function show() {
return this;
}
const obj = { show };
obj.show(); // this = obj (определился при вызове)
const ref = obj.show;
ref(); // this = undefined (strict) — другой вызовКогда и как определяется
В момент вызова по правилам:
- вызов метода
obj.fn()→this = obj; new Fn()→this= новый объект;fn.call/apply(ctx)→this = ctx;- обычный вызов
fn()→undefined(strict) /globalThis.
Исключение — стрелки
Стрелочная функция не получает this при вызове: она захватывает его лексически в момент создания из внешнего окружения. Поэтому её this фиксирован и не зависит от способа вызова.
Коротко для собеседования
this появляется при вызове функции и определяется способом вызова (метод, new, call/apply/bind, обычный вызов). До вызова фиксированного контекста нет. Исключение — стрелки, берущие this лексически при создании.