Node.js中的Global全局对象

 2015年06月22日    785     声明


全局对象是指在所有模块中都是可以使用的对象,在Node.js中虽然有些对象在所有模块中都可使用,但其作用域只在当前模块。在浏览器环境中,顶级作用域就是全局作用域,通过var在全局作用域内定义一个变量,将会是一个全局变量。在Node中则不同,顶级作用域并非全局作用域,在Node模块里通过var定义的变量只属于那个模块。如果要在所有模块中使用变,就要将其写入global中,global是一个指向全局命名空间对象。

  1. 全局模块
  2. 模块加载对象:require
  3. 全局变量:__filename、__dirname
  4. 计时器:setTimeout(cb, ms)、clearTimeout(t)、setInterval(cb, ms)、clearInterval(t)


1. 全局模块

1.1 进程对象:process

process是用于进程相关处理的对象,请看:Node.js中的全局对象之process进程对象

1.2 控制台对象:console

console是用于控制台标准备输出、标准错误等相关处理的对象,请看:Node.js中的全局对象之console控制台对象

1.3 二进制数据处理类: Buffer

Buffer是一个二进制数据处理类,用于处理缓冲区、编码/解码二进制数据等,请看:利用Buffer类处理缓冲区、编码/解码二进制数据

1.4 模块对象:module

module对象用于Node模块的相关处理,请看:Node.js中的全局对象之module模块对象及模块加载机制

1.5 模块导出对象:exports

exports对象是对module.exports对象的引用,其在module模块中的实现源码如下:

global.exports = self.exports;


2. 模块加载对象:require

require对象是对module.require的进一步实现在,在module.require方法的基础上,require对象又引入模块路径解析、模块缓等。require实际上并非全局的而是模块作用域的。

2.1 引入模块:require()

require()方法用于加载模块。示例如下:

var http = require('http');

2.2 返回模块路径:require.resolve()

require.resolve()方法基于require()机制查找模块的位置,但不加载模块,只返回解析过的模块文件路径。示例如下:

console.log(require.resolve('./myModule'));    ///Users/liuht/code/itbilu/demo/myModule.js
console.log(require.resolve('http'));    //http

2.3 模块缓存对象:require.cache

require模块缓存机制,模块在首次加载时将会被缓存,模块在引入时会缓存到require.cache中。删除该对象的键值,下次调用require时会重新加载相应模块。示例如下:

var http = require('http');
console.log(require.cache);   //将返回模块的缓存对象


3. 全局变量:__filename、__dirname

在global全局对象中,有两个全局变量:__filename__dirname,分别用于返回当前模块文件的绝对路径和模块文件所在文件夹的路径。__filename__dirname并非在全局作用域中,而是在模块作用域中。示例,在/Users/liuht下运行node example.js,如下:

console.log(__filename);
// /Users/liuht/example.js

console.log(__dirname);
// /Users/liuht


4. 计时器:setTimeout(cb, ms)、clearTimeout(t)、setInterval(cb, ms)、clearInterval(t)

Node在全局对象中实现了JavaScript中计时器相关的四个方法。

  • setTimeout(cb, ms):在ms毫秒后调用回调方法cb。实际延迟取决于外部因素,如操作系统定时器粒度及系统负载。ms取值范围为1-2147483647,超出范围会被当作1毫秒处理。一般来说,一个定时器不能超过24.8天。
  • clearTimeout(t):停止一个之前通过setTimeout()创建的定时器。清除后回调不会再被执行。
  • setInterval(cb, ms):每隔ms毫秒执行调用回调方法cb。由于外部因素,如操作系统定时器粒度及系统负载,实际间隔可能会改变,一般不会少于ms而是比ms长。ms取值范围为1-2147483647,超出范围会被当作1毫秒处理。一般来说,一个定时器不能超过24.8天。
  • clearInterval(t):停止一个之前通过clearInterval()创建的定时器。清除后回调不会再被执行。