JavaScript中挂载全局变量本质是设置全局对象属性,浏览器用window/self,Node.js用global,推荐globalThis;var在非严格模式下自动挂载,隐式赋值不安全,应显式声明并注意属性特性。

在 JavaScript 中,全局对象属性挂载新变量,本质就是把变量作为全局对象的属性来设置。不同运行环境对应的全局对象不同:浏览器中是 window(或 self),Node.js 中是 global,现代标准下也可用 globalThis 统一访问。
直接赋值给全局对象
最直接的方式是显式将属性添加到全局对象上:
- 浏览器中:
window.myVar = 'hello';或self.myVar = 'hello'; - Node.js 中:
global.myVar = 'hello'; - 跨环境推荐:
globalThis.myVar = 'hello';(ES2020+,安全可靠)
使用 var 声明(仅限非严格模式)
在非严格模式下,顶层作用域中用 var 声明的变量会自动成为全局对象的可配置属性:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
var foo = 123;→foo和window.foo(浏览器)都存在且同步 - 但严格模式下(
'use strict';)不会挂载,不推荐依赖此行为
避免隐式挂载(慎用不声明直接赋值)
像 bar = 'test'; 这样不加 var/let/const 的赋值,在非严格模式下会创建全局属性,但属于**意外副作用**:
立即学习“Java免费学习笔记(深入)”;
- 容易引发命名冲突、难以调试
- 严格模式下直接报错
ReferenceError - 应始终显式声明变量,避免这种“隐式全局”
注意属性特性(如可删除性、枚举性)
直接赋值(如 globalThis.x = 1)创建的属性默认是 可写、可枚举、可配置;若需控制行为,可用 Object.defineProperty:
Object.defineProperty(globalThis, 'PI', { value: 3.14159, writable: false, enumerable: true, configurable: false });- 这样挂载的
PI就不可被重新赋值或删除

















