Node.js global 全局对象
global 是 Node.js 的全局命名空间对象,所有全局变量和函数都是它的属性。
基本概念
JavaScript
// 全局变量自动成为 global 的属性
global.myVar = 'Hello';
console.log(myVar); // 'Hello'
// 内置全局对象
console.log(global.console === console); // true
console.log(global.process === process); // true
console.log(global.setTimeout === setTimeout); // true
global 中的内置属性
JavaScript
// 查看所有全局属性
console.log(Object.keys(global));
// 常见全局属性
global.console // 控制台对象
global.process // 进程对象
global.Buffer // Buffer 类
global.setTimeout // 定时器函数
global.setInterval // 间隔定时器
global.setImmediate // 立即执行
global.__dirname // 当前目录(模块局部)
global.__filename // 当前文件路径(模块局部)
与浏览器 window 的区别
| 特性 | Node.js global | 浏览器 window |
|---|---|---|
| 顶层对象 | global | window |
| 模块作用域 | 有(文件级作用域) | 无(全局共享) |
| var 声明 | 模块局部 | 成为 window 属性 |
| DOM 访问 | 无 | 有 |
JavaScript
// Node.js
var a = 1;
console.log(global.a); // undefined(模块局部)
// 浏览器
// var a = 1;
// console.log(window.a); // 1(全局属性)
共享数据的正确方式
JavaScript
// ❌ 不推荐:污染全局命名空间
global.userData = { name: 'Tom' };
// ✅ 推荐:使用模块导出
// user.js
module.exports = { name: 'Tom' };
// app.js
const user = require('./user');
globalThis
ES2020 引入 globalThis,统一了不同环境下的全局对象:
JavaScript
// Node.js
console.log(globalThis === global); // true
// 浏览器
// console.log(globalThis === window); // true
避免向 global 添加属性,会造成命名冲突和内存泄漏,应使用模块系统共享数据。
要点总结
- global 是 Node.js 的全局命名空间对象
- 所有全局变量和函数都是 global 的属性
- 与浏览器 window 不同,var 声明不会成为 global 属性
- 避免直接使用 global 共享数据,推荐使用模块导出
📝 发现内容有误?点击此处直接编辑