在浏览器 JavaScript 中,通常 window 是全局对象, 而 Node.js 中的全局对象是 global,所有全局变量(除了 global 本身以外)都是 global 对象的属性。
在 Node.js 中,有一些全局对象和全局变量可供使用。这些对象在 Node.js 环境中是全局可访问的,以下是一些常见的 Node.js 全局对象的使用方法:
Node中的全局对象
1. global
对象
global
对象是 Node.js 中的全局对象,类似于浏览器环境中的 window
对象。可以在任何地方访问 global
对象中定义的变量和函数。
global.globalVar = 'Global Variable';
global.globalFunction = function() {
console.log('This is a global function');
};
console.log(global.globalVar); // 输出: Global Variable
globalFunction(); // 输出: Global Function
2. process
对象
process
对象提供有关当前 Node.js 进程的信息,并允许与进程进行交互,比如获取环境变量、退出进程等。
process.on('exit', function(code) {
// 由于进程即将退出,事件循环会被中止,这个 setTimeout 的回调函数永远不会执行。
setTimeout(function() {
console.log("该代码不会执行");
}, 0);
console.log('退出码为:', code);
});
console.log("程序执行结束");
Node.js 在程序结束时也会执行一些清理操作,并隐式触发 exit
事件。也可以手动触发 process.exit()
3. console
对象
console
对象提供了标准的输出和错误输出功能,可用于在控制台输出信息。
console.log('This is a log message');
console.info('This is an info message');
console.error('This is an error message');
console.warn('This is a warning message');
4. Buffer
类
Buffer
类用于处理二进制数据,是 Node.js 中处理二进制数据的核心模块。
const buf = Buffer.from('hello', 'utf8');
console.log(buf.toString('hex')); // 将字符串转换为十六进制
5. require
函数
require
函数用于引入模块,是 Node.js 模块化系统的核心,可以用于在代码中引入其他模块。
const fs = require('fs'); // 引入文件系统模块
Node中的全局变量:
定义全局变量的4种方法
-
使用
global
对象来定义全局变量(不推荐) -
省略变量直接赋值,该变量将自动成为全局变量,并且会成为全局对象
global
的属性(不推荐)
下面的例子,打印global
里的 内容 ,会发现a
也是global
的一个属性
a = 10 // 省略变量声明直接赋值
global.c = 30 // 使用 global 对象定义
function add(num) {
if (num === 0) return num + a;
if (num != 0 ) {
return num + c;
}
}
console.log(global) // {a,c}
console.log(add(0)) //10
console.log(add(1)) //31
- 使用
process.env
:
process.env.MY_GLOBAL_VAR = 'This is a global variable using process.env';
这种方式通常用来定义环境变量,可以在整个应用程序中访问。
- 使用
globalThis
(Node.js 12 及以上版本):
Node.js 12 开始支持 globalThis
,它提供一个标准的访问全局对象的方式,适用于浏览器和 Node.js。
globalThis.myGlobalVar = 'This is a global variable using globalThis';
process.env.MY_GLOBAL_VAR = 'This is a global variable using process.env';
globalThis.myGlobalVar = 'This is a global variable using globalThis';
console.log("process.env.MY_GLOBAL_VAR=",process.env.MY_GLOBAL_VAR);
console.log("globalThis=",globalThis);
在模块中定义全局变量并导出:
全局变量,可以在应用程序的任何地方访问。然而,这种方法容易引起意外的变量覆盖或污染全局命名空间。更好的做法是创建一个模块,在模块中定义变量,并通过导出使其可在应用程序的其他部分中访问。这样可以更好地控制变量的作用域和可见性,避免全局变量带来的潜在问题。以下是一个示例
// globalVars.js
const myGlobalVar = 'This is a global variable within a module';
module.exports.myGlobalVar = myGlobalVar;
在其他文件中,通过引入模块来访问全局变量:
const { myGlobalVar } = require('./globalVars');
console.log(myGlobalVar); // 输出 'This is a global variable within a module'
Node中的全局变量
console.log( __filename ); //d:\LearningNode\1.js 当前正在执行的脚本的文件名
console.log( __dirname ); // d:\LearningNode 当前执行脚本所在的目录