Всегда ли Window является главным контекстом?
Объекты и прототипы
Нет, `window` не всегда является главным контекстом: это глобальный объект только в браузере. В других средах глобальный объект иной (`global` в Node, `self` в воркерах), а `this` зависит от контекста вызова.
window — глобальный объект браузера
В браузере window — глобальный объект: глобальные переменные (var) и функции становятся его свойствами, this в глобальном коде (нестрогий режим) = window.
var x = 5;
window.x; // 5В других средах — другой глобальный объект
- Node.js —
global(неwindow). - Web Workers —
self(нет доступа кwindow/DOM). - Универсально —
globalThis(работает везде).
globalThis; // window / global / self в зависимости от средыthis ≠ всегда window
this определяется контекстом вызова, а не всегда равен window:
'use strict';
function fn() { return this; }
fn(); // undefined (strict), а не window
obj.method(); // this = obj- В strict mode
thisв обычной функции —undefined. - В методе — объект.
- В модуле верхнего уровня —
undefined.
Коротко для собеседования
Нет: window — глобальный объект только в браузере; в Node это global, в воркерах — self, универсально — globalThis. И this не всегда window — он зависит от контекста вызова (в strict-функции — undefined, в методе — объект, в модуле — undefined).