在 javascript 中,全局对象上的变量可以通过全局对象的属性名直接访问。在浏览器环境中,全局对象是 window;在 node.js 环境中,全局对象是 global(或 globalthis)。这意味着如果你在全局作用域声明了一个变量,它会自动成为该全局对象的一个属性,你既可以使用点语法(如 window.myvar)访问,也可以使用方括号语法(如 window['myvar'])访问。

浏览器环境下如何访问全局变量
在浏览器中,所有通过 var 声明的全局变量都是 window 对象的属性。你可以直接使用 window.变量名 来读取它们。如果变量是通过 let 或 const 声明的,虽然它们也是全局的,但不会挂载到 window 上,而是存在于全局词法环境(Global Lexical Environment)中,此时应使用 globalThis 或直接引用变量名。

var globalVar = 'I am global'; console.log(window.globalVar); // 输出: I am global console.log(globalThis.globalVar); // 输出: I am global let lexicalGlobal = 'Lexical Global'; console.log(window.lexicalGlobal); // 输出: undefined console.log(globalThis.lexicalGlobal); // 输出: Lexical Global
Node.js 环境下如何访问全局变量
在 Node.js 中,模块化的设计使得文件级别的变量默认不是全局的。只有通过 global 对象显式挂载或通过 var 在顶层(非模块内)声明的变量才是全局的。推荐使用 globalThis 作为跨环境的统一入口。在 Node.js 中,global 是 globalThis 的一个别名,指向同一个对象。
立即学习“Java免费学习笔记(深入)”;

// Node.js 示例 var nodeGlobalVar = 'Node Global'; global.anotherGlobal = 'Another Global'; console.log(global.nodeGlobalVar); // 输出: Node Global console.log(globalThis.anotherGlobal); // 输出: Another Global console.log(globalThis.nodeGlobalVar); // 输出: Node Global
动态属性名访问时的注意事项
当需要通过字符串动态获取全局变量时,必须使用方括号语法 globalObj[variableName]。这种方式允许你在运行时决定访问哪个属性。需要注意的是,如果变量名不存在,返回值为 undefined,而不会抛出错误。此外,对于通过 let 或 const 声明的全局变量,即使使用 globalThis[varName] 也无法访问,因为它们不属于全局对象的属性集合,这种限制有助于避免意外污染全局命名空间。


















