nodejs - 全局变量讲解
2026/8/25 10:18:28 网站建设 项目流程

文章目录

      • 1. 核心概念:`global` 与 `globalThis`
      • 2. 最重要的区别:模块作用域
      • 3. 真正的全局对象 / 变量
      • 4. 看起来像全局,其实不是的变量
      • 5. 最常用的全局对象:`process`
      • 6. 如何正确使用全局变量(建议)
      • 7. 总结

在浏览器中,全局对象是window;在 Node.js 中,对应的是global
但 Node.js 的全局变量体系和浏览器有很大区别,尤其是在模块作用域方面。

1. 核心概念:globalglobalThis

名称说明推荐程度
globalNode.js 特有的全局对象旧写法,不推荐新代码使用
globalThisES2020 标准,跨环境统一访问全局对象推荐使用
// 两者在 Node.js 中指向同一个对象console.log(global===globalThis);// true

2. 最重要的区别:模块作用域

在浏览器中:

vara=1;// 自动变成 window.a

在 Node.js 中:

vara=1;// 只是当前模块的局部变量,不会变成 global.aconsole.log(global.a);// undefined

原因:Node.js 每个文件都被包装成一个模块函数,类似这样:

(function(exports,require,module,__filename,__dirname){// 你的代码写在这里vara=1;// 只在这个函数作用域内});

所以想让变量真正变成全局,必须显式挂载

global.myVar='我是全局变量';// 或者globalThis.myVar='我是全局变量';

其他文件中就可以直接访问:

console.log(global.myVar);// 我是全局变量

3. 真正的全局对象 / 变量

以下这些是真正全局可用的(不需要 require):

名称说明
global/globalThis全局对象本身
console控制台输出
process当前进程信息(非常常用)
Buffer处理二进制数据
setTimeout/setInterval定时器
setImmediate/clearImmediateNode.js 特有的立即执行定时器
queueMicrotask微任务队列
URL/URLSearchParamsURL 处理
TextEncoder/TextDecoder文本编码
performance性能相关
fetch(较新版本)网络请求

4. 看起来像全局,其实不是的变量

这些变量只在当前模块内可用,并不是真正的全局:

变量说明
__dirname当前文件所在目录的绝对路径
__filename当前文件的绝对路径
module当前模块对象
exportsmodule.exports的快捷方式
require引入其他模块的函数
console.log(__dirname);// 当前目录路径console.log(__filename);// 当前文件完整路径

5. 最常用的全局对象:process

process是 Node.js 中最重要的全局对象之一:

// 环境变量console.log(process.env.NODE_ENV);console.log(process.env.PATH);// 命令行参数console.log(process.argv);// 当前工作目录console.log(process.cwd());// 退出程序process.exit(0);// 监听退出事件process.on('exit',(code)=>{console.log('进程即将退出,退出码:',code);});

6. 如何正确使用全局变量(建议)

不推荐随便挂全局变量:

// 不推荐global.config={port:3000};

推荐做法

  1. 使用模块导出(最推荐)
// config.jsmodule.exports={port:3000,dbUrl:'mongodb://localhost/test'};// 其他文件constconfig=require('./config');
  1. 使用环境变量(适合配置、密钥)
// 通过 .env 或系统环境变量设置console.log(process.env.DB_PASSWORD);
  1. 必须用全局时,统一挂到一个命名空间下
globalThis.App={config:{...},utils:{...}};

7. 总结

对比项浏览器Node.js
全局对象windowglobal/globalThis
var声明自动变成全局不会变成全局
模块作用域无原生模块每个文件都是独立模块
推荐访问方式window/globalThisglobalThis

核心记忆点

  • Node.js 中默认没有“随便写就变成全局”的行为
  • 真正全局的东西要用global/globalThis显式挂载
  • 绝大多数情况下,优先用模块导出 +require/import,而不是依赖全局变量

🚀 感谢阅读!想了解更多?

📖 我的博客网站 | 记录思考,分享干货
🏡 我的个人主页 | 关于我、开源项目


需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询