PassFront
  1. PassFront
  2. База знаний
  3. Объекты и прототипы

Всегда ли 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).

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