CNode

Node.js 的 Global全局对象

分享
Ii5ting发布于9 年前最后回复9 年前7 回复6500 浏览0 收藏

Node.js 的 Global全局对象

模块分2种,1)基于commonjs规范编写的普通模块,前面已经讲过,2)Global全局对象,即无需引用就可以直接使用的对象,本节主要讲第二种。另外,需要注意的是全局对象和global关键字的区别。

内置全局对象

内置全局对象指的的是在所有模块里无需引用就可以使用的模块。

具体如下

编号对象描述
1Buffer数据类型
2__dirname当前文件目录
3__filename当前文件名称
4console控制台输出模块
5exportscommonjs关键字
6global共享的全局对象
7modulecommonjs关键字
8process当前node进程对象
9require()、require.cache、require.extensions、require.resolve()commonjs关键字
10setImmediate(callback[, ...args])event loop相关api
11setInterval(callback, delay[, ...args])event loop相关api
12setTimeout(callback, delay[, ...args])event loop相关api
13clearImmediate(immediateObject)event loop相关api
14clearInterval(intervalObject)event loop相关api
15clearTimeout(timeoutObject)event loop相关api

具体分类如下

1)模块包装而暴露的

(function (exports, require, module, __filename, __dirname) {
// Your module code actually lives in here
});
  • exports
  • require、require.cache、require.extensions、require.resolve()
  • module
  • __filename
  • __dirname

2)内置process模块

在第5章《Node.js是如何执行的》里有针对process模块的详细介绍。作为核心模块,它是对当前Node现场各种信息的绑定,作为全局模块,是一个极其明智的选择,Java8借鉴了这种实现。

3)控制台console模块

比如我们常用的console.log(),在js语言里有实现,在node又单独实现了一次,原因是在node需要在终端输出,这和在浏览器里的行为是不一样的。在lib/console.js

// As of v8 5.0.71.32, the combination of rest param, template string
// and .apply(null, args) benchmarks consistently faster than using
// the spread operator when calling util.format.
Console.prototype.log = function log(...args) {
  write(this._ignoreErrors,
        this._stdout,
        `${util.format.apply(null, args)}\n`,
        this._stdoutErrorHandler);
};

它是在lib/internal/bootstrap_node.js里被绑定为全局对象的。

if (!process._noBrowserGlobals) {
  setupGlobalTimeouts();
  setupGlobalConsole();
}

4)针对event loop相关api的实现

主要是setImmediate、setInterval、setTimeout和对应的clear方法实现。其实大家也可以想想,如果想对event loop的队列进行操作,做成全局模块是非常方便的。

除了上述4种类型外,还有特定类型 Bufferglobal 对象,下面会分别进行讲解。

查看回复

回复 (7)

D
DevinXian#1·9 年前

console.log(global)

I
i5ting#2·9 年前
引用 DevinXianconsole.log(global)

@DevinXian 是2个概念,全局对象和global上绑定的对象不一样,global是全局的一个子集

F
fangker#3·9 年前

只能给差评了,下面分别进行讲解。。下面在哪?逼死强迫症

R
rwing#4·9 年前

不错 好文

W
wbget#7·9 年前

收藏了,想知道特定类型 global 更多的讲解。

参与回复
登录后即可参与回复。登录