JavaScript 中全局对象的标准化访问方式是 globalThis,它在浏览器(等价于 window)、Node.js(替代 global)和 Web Worker(等价于 self)中统一可用;var 声明和显式挂载会成为其属性,但 let/const 和模块顶层绑定不会自动暴露。

在 JavaScript 中,全局对象是访问顶层作用域变量的关键入口。不同运行环境下的全局对象名称不同:浏览器中是 window,Node.js 中是 globalThis(或旧版的 global),而 Web Worker 中是 self。现代推荐统一使用 globalThis,它是 ES2020 引入的标准化全局对象引用。
用 globalThis 访问全局变量(推荐)
globalThis 是跨环境兼容的全局对象,无论在浏览器、Node.js 还是 Deno 中都可用。所有在顶层声明的 var 变量(非 let/const)以及显式挂载的属性,都会成为它的自有属性或可枚举属性。
- 顶层用
var x = 123声明 →globalThis.x可读写 - 直接赋值
y = 456(非严格模式)→globalThis.y存在 - 用
globalThis.z = 789显式挂载 → 在任意环境都能访问
浏览器中 window 是 globalThis 的别名
在浏览器环境下,window 就是全局对象,等价于 globalThis。但注意:let、const 和 class 声明的顶层绑定不会成为 window 的属性,它们存在于模块作用域或脚本作用域中,不可通过 window.xxx 访问。
var a = 'hello'; console.log(window.a); // 'hello'const b = 'world'; console.log(window.b); // undefinedwindow.c = 'hi'; console.log(c); // 'hi'(隐式创建全局变量)
Node.js 中 globalThis 替代 global
Node.js 从 v12 开始支持 globalThis,它比老式的 global 更标准、更安全。在 CommonJS 模块中,顶层 this 指向 exports,不是全局对象;而 globalThis 始终指向真正的全局对象。
立即学习“Java免费学习笔记(深入)”;
var nodeVar = 'node'; console.log(globalThis.nodeVar); // 'node'-
globalThis.NODE_ENV = 'production';可被其他模块读取(需确保未启用模块作用域隔离) - 避免使用
global,因其在某些打包工具或实验性环境中可能被重定义
注意作用域与模块系统的限制
ES 模块(.mjs 或 type="module")默认启用严格模式,且顶层 this 为 undefined,var 声明也不会自动挂到全局对象上。此时只有显式赋值给 globalThis 才能暴露变量。
- 模块内
var x = 1→globalThis.x仍为undefined - 必须写
globalThis.x = 1才能在外部(如 DevTools 或其他模块)访问 - 动态添加属性时,建议加判断避免重复定义:
if (!('myLib' in globalThis)) globalThis.myLib = {};


















