ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

nodejs - 全局变量讲解

nodejs - 全局变量讲解 文章目录1. 核心概念global 与 globalThis2. 最重要的区别模块作用域3. 真正的全局对象 / 变量4. 看起来像全局其实不是的变量5. 最常用的全局对象process6. 如何正确使用全局变量建议7. 总结在浏览器中全局对象是window在 Node.js 中对应的是global。但 Node.js 的全局变量体系和浏览器有很大区别尤其是在模块作用域方面。1. 核心概念global与globalThis名称说明推荐程度globalNode.js 特有的全局对象旧写法不推荐新代码使用globalThisES2020 标准跨环境统一访问全局对象推荐使用// 两者在 Node.js 中指向同一个对象console.log(globalglobalThis);// true2. 最重要的区别模块作用域在浏览器中vara1;// 自动变成 window.a在 Node.js 中vara1;// 只是当前模块的局部变量不会变成 global.aconsole.log(global.a);// undefined原因Node.js 每个文件都被包装成一个模块函数类似这样(function(exports,require,module,__filename,__dirname){// 你的代码写在这里vara1;// 只在这个函数作用域内});所以想让变量真正变成全局必须显式挂载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. 最常用的全局对象processprocess是 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};推荐做法使用模块导出最推荐// config.jsmodule.exports{port:3000,dbUrl:mongodb://localhost/test};// 其他文件constconfigrequire(./config);使用环境变量适合配置、密钥// 通过 .env 或系统环境变量设置console.log(process.env.DB_PASSWORD);必须用全局时统一挂到一个命名空间下globalThis.App{config:{...},utils:{...}};7. 总结对比项浏览器Node.js全局对象windowglobal/globalThisvar声明自动变成全局不会变成全局模块作用域无原生模块每个文件都是独立模块推荐访问方式window/globalThisglobalThis核心记忆点Node.js 中默认没有“随便写就变成全局”的行为真正全局的东西要用global/globalThis显式挂载绝大多数情况下优先用模块导出 require/import而不是依赖全局变量 感谢阅读想了解更多 我的博客网站 | 记录思考分享干货 我的个人主页 | 关于我、开源项目
返回列表