应优先使用 globalthis 访问全局对象,因其是 es2020 标准化方案,兼容浏览器、node.js 等环境;window 仅限浏览器且存在兼容与污染风险;var 声明变量自动挂载 window,但 let/const 不会;模块中顶层 var 不挂 window,globalthis 是唯一可靠入口。

在 JavaScript 中,全局变量可以通过 window(浏览器环境)或 globalThis(跨环境标准方式)来访问和定义。两者的区别在于兼容性和适用场景:window 仅在浏览器中有效,而 globalThis 是 ES2020 引入的标准化全局对象,统一了不同运行时(如浏览器、Node.js、Web Worker)的全局访问方式。
浏览器中用 window 访问全局变量
在浏览器环境下,所有在全局作用域中声明的 var 变量、函数声明,以及直接挂载到 window 上的属性,都会成为 window 的属性。这意味着你可以通过 window.xxx 或 window["xxx"] 来读写它们。
-
var 声明的变量会自动成为 window 属性:例如
var a = 123;后,window.a和a都可访问;但let、const、class、function(严格模式下)不会挂载到 window。 -
显式挂载更可控:推荐用
window.myVar = value明确暴露变量,避免依赖 var 的隐式绑定。 - 注意污染风险:频繁操作 window 容易引发命名冲突,尤其在多人协作或引入第三方脚本时。
用 globalThis 统一访问全局对象
globalThis 是 JavaScript 的标准全局对象引用,无论运行在浏览器、Node.js 还是 Deno 中,它都指向当前环境的全局对象(浏览器中等于 window,Node.js 中等于 global)。
- 兼容性好(现代环境基本支持):Chrome 71+、Firefox 65+、Safari 12.1+、Node.js 12+ 均支持;旧环境可用 polyfill(如 global-this)。
-
安全且语义清晰:相比硬编码
window或global,globalThis不需判断运行环境,代码更健壮。 -
可用于动态定义/读取全局变量:例如
globalThis.API_URL = "https://api.example.com";,之后任何地方都能通过globalThis.API_URL获取。
实际使用建议
日常开发中应优先使用 globalThis,仅在需要兼容极老浏览器(如 IE)且不依赖 Node.js 时才回退到 window。
- 模块化项目中尽量避免使用全局变量,优先用 ES 模块导出/导入。
- 若必须暴露全局配置或工具函数,统一通过
globalThis.MyLib = {...}挂载,并加命名空间防止冲突。 - 调试时可在控制台输入
globalThis查看当前全局对象的所有属性,比直接输window更具可移植性。
常见误区提醒
不要混淆“全局变量”与“全局对象属性”。比如在模块文件(type="module")中,顶层 var 不会挂到 window;而 this 在非严格模式全局中指向 window,严格模式下为 undefined —— 此时只有 globalThis 是稳定可靠的入口。
-
globalThis === window在浏览器中为 true,但在 Node.js 中为 false(此时globalThis === global)。 -
globalThis不可被重新赋值,是只读属性,保障安全性。 - 不要用
eval("this")或Function("return this")()替代,存在安全与性能问题。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











