全局对象
JavaScript 中的**全局对象**是一个表示全局作用域的对象。
注意:全局可用对象(即全局作用域中的对象)有时也称为全局对象,但严格来说,每个环境只有一个全局对象。
在每个 JavaScript 环境中,始终定义了一个全局对象。全局对象的接口取决于脚本运行的执行上下文。例如
- 在 Web 浏览器中,脚本未明确启动为后台任务的任何代码都将
Window
作为其全局对象。这构成了 Web 上绝大多数 JavaScript 代码。 - 在
Worker
中运行的代码将WorkerGlobalScope
对象作为其全局对象。 - 在Node.js下运行的脚本将名为
global
的对象作为其全局对象。
全局属性globalThis
允许访问全局对象,而不管当前环境如何。
var
语句和脚本顶层的函数声明会创建全局对象的属性。另一方面,let
和const
声明永远不会创建全局对象的属性。
全局对象的属性会自动添加到全局作用域。
在 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)