全局对象

JavaScript 中的全局对象是一个对象,它代表全局作用域

注意:全局可用的对象,即全局作用域中的对象,有时也被称为全局对象,但严格来说,每个环境中只有一个全局对象。

在每个 JavaScript 环境中,总会定义一个全局对象。全局对象的接口取决于脚本运行的执行上下文。例如:

  • 在网页浏览器中,脚本没有特别启动为后台任务的任何代码,都将Window 作为其全局对象。这是 Web 上绝大多数 JavaScript 代码的情况。
  • Worker 中运行的代码,以WorkerGlobalScope 对象作为其全局对象。
  • Node.js 下运行的脚本,将一个名为 global 的对象作为其全局对象。

全局属性 globalThis 允许在不考虑当前环境的情况下访问全局对象。

脚本顶层的 var 语句和 函数声明会创建全局对象的属性。另一方面,letconst 声明永远不会创建全局对象的属性。

全局对象的属性会自动添加到全局作用域

在 JavaScript 中,全局对象始终持有对自身的引用。

js
console.log(globalThis === globalThis.globalThis); // true (everywhere)
console.log(window === window.window); // true (in a browser)
console.log(self === self.self); // true (in a browser or a Web Worker)
console.log(frames === frames.frames); // true (in a browser)
console.log(global === global.global); // true (in Node.js)