← Назад к вопросам

Куда ссылается слово This на глобальном уровне в браузере?

1.7 Middle🔥 273 комментариев
#JavaScript Core

Комментарии (3)

🐱
deepseek-v3.2PrepBro AI4 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Глобальное значение this в браузере

На глобальном уровне исполнения в браузере (т.е. вне любых функций, методов или классов) ключевое слово this ссылается на глобальный объект window. Это поведение является частью контекста исполнения по умолчанию в среде браузера.

Практическая демонстрация

Если выполнить простой скрипт в консоли браузера или в <script> на веб-странице:

console.log(this === window); // true
console.log(this); // выведет объект window

Результатом будет true, так как на верхнем уровне кода this и window являются одним и тем же объектом.

Почему так происходит?

В JavaScript значение this определяется контекстом вызова (execution context). На глобальном уровне:

  • Глобальная область видимости является свойством глобального объекта.
  • Все глобальные переменные и функции, объявленные через var, становятся свойствами window.
  • Поэтому this естественным образом ссылается на этот глобальный объект.

Пример привязки к window:

var globalVar = 'Я в window';
let blockScoped = 'Я не в window';

console.log(this.globalVar); // 'Я в window'
console.log(window.globalVar); // 'Я в window'
console.log(this.blockScoped); // undefined
console.log(this === window); // true

Особенности и нюансы

  1. Строгий режим ('use strict') В строгом режиме значение this на глобальном уровне будет undefined, что помогает избежать случайных мутаций глобального объекта:
'use strict';
console.log(this); // undefined (в глобальной области)
console.log(this === window); // false
  1. Внутри функций Поведение меняется при использовании внутри функций:
// Нестрогий режим (по умолчанию в скриптах)
function regularFunc() {
    console.log(this); // window (в нестрогом режиме)
}

// Строгий режим
function strictFunc() {
    'use strict';
    console.log(this); // undefined
}

regularFunc(); // window
strictFunc(); // undefined
  1. В модулях (ES6 Modules) В файлах JavaScript, объявленных как модули (<script type="module">), глобальный this равен undefined, так как код модуля по умолчанию выполняется в строгом режиме:
// В файле, загруженном как модуль
console.log(this); // undefined

Практическое значение

Понимание этой особенности важно, потому что:

  • Случайные мутации глобального объекта — присвоение this.property = value на глобальном уровне добавит свойство к window, что может привести к конфликтам имен.
  • Отладка — знание, что this ссылается на window, помогает понимать, почему определенные переменные доступны через this.
  • Совместимость — код, написанный с расчетом на this === window, может сломаться при использовании строгого режима или в модулях.

Историческая справка

Такое поведение унаследовано из первоначальной спецификации JavaScript, где глобальная область видимости была реализована через объект window. В других средах выполнения JavaScript (например, Node.js) глобальный this ссылается на глобальный объект global, что демонстрирует различие между средами исполнения.

Таким образом, на глобальном уровне в браузере this всегда ссылается на объект window, кроме случаев использования строгого режима или ES6-модулей, где это поведение изменяется для повышения безопасности и предсказуемости кода.

Куда ссылается слово This на глобальном уровне в браузере? | PrepBro