Module 基础模块

模块 global

全局对象,所有脚本均可以访问的基础对象

对象

Buffer

二进制数据缓存对象,用于 io 读写的数据处理,参见 Buffer 对象。

1
Buffer global.Buffer;

URL

创建一个 UrlObject 请求对象,参见 UrlObject

1
UrlObject global.URL;

TextDecoder

TextDecoder 解码对象,参见 TextDecoder 对象。

1
TextDecoder global.TextDecoder;

TextEncoder

TextEncoder 编码对象,参见 TextEncoder 对象。

1
TextEncoder global.TextEncoder;

console

控制台访问对象

1
console global.console;

process

进程对象

1
process global.process;

performance

基础性能监控模块

1
performance global.performance;

静态函数

run

运行一个脚本

1
static global.run(String fname);

调用参数:

  • fname: String, 指定要运行的脚本路径

require

加载一个模块并返回模块对象,更多信息参阅 @ref module

1
static Value global.require(String id);

调用参数:

  • id: String, 指定要加载的模块名称

返回结果:

  • Value, 返回加载模块的引出对象

require 可用于加载基础模块,文件模块。

基础模块是沙箱创建时初始化的模块,引用时只需传递相应的 id,比如 require("net")。

文件模块是用户自定义模块,引用时需传递以 ./ 或 ../ 开头的相对路径。文件模块支持 .js, .jsc 和 .json 文件。

文件模块也支持 package.json 格式,当模块为目录结构时,require 会先查询 package.json 中的 main,未发现则尝试加载路径下的 index.js, index.jsc 或 index.json。

若引用路径不是 ./ 或 ../ 开头,并且非基础模块,require 从当前模块所在路径下的 node_modules 查找,并上级目录递归。

基础流程如下:

%0 start start is_native is internal module? start->is_native resolve path.resolve has_file module exists? resolve->has_file search recursive lookup node_modules from the current path search->has_file load load end end load->end is_native->end Yes is_mod is module? is_native->is_mod No is_mod->search Yes is_abs is absolute? is_mod->is_abs No is_abs->resolve No is_abs->has_file Yes has_file->load Yes has_ext module.js exists? has_file->has_ext No has_ext->load Yes has_package /package.json exists? has_ext->has_package No has_main main exists? has_package->has_main Yes has_index index.js exists? has_package->has_index No has_main->load Yes has_main->has_index No has_index->load Yes has_index->end No

setTimeout

在指定的时间后调用函数

1 2 3
static Timer global.setTimeout(Function callback, Number timeout = 1, ...args);

调用参数:

  • callback: Function, 指定回调函数
  • timeout: Number, 指定延时的时间,以毫秒为单位。超过 2^31 的话,立即执行。
  • args: ..., 额外的参数,传入到指定的 callback 内,可选。

返回结果:

  • Timer, 返回定时器对象

clearTimeout

清除指定的定时器

1
static global.clearTimeout(Value t);

调用参数:

  • t: Value, 指定要清除的定时器

setInterval

每间隔指定的时间后调用函数

1 2 3
static Timer global.setInterval(Function callback, Number timeout, ...args);

调用参数:

  • callback: Function, 指定回调函数
  • timeout: Number, 指定间隔的时间,以毫秒为单位。超过 2^31 的话,立即执行。
  • args: ..., 额外的参数,传入到指定的 callback 内,可选。

返回结果:

  • Timer, 返回定时器对象

clearInterval

清除指定的定时器

1
static global.clearInterval(Value t);

调用参数:

  • t: Value, 指定要清除的定时器

setHrInterval

每间隔指定的时间后调用函数,这是个高精度定时器,会主动打断正在运行的 JavaScript 脚本执行定时器

1 2 3
static Timer global.setHrInterval(Function callback, Number timeout, ...args);

调用参数:

  • callback: Function, 指定回调函数
  • timeout: Number, 指定间隔的时间,以毫秒为单位。超过 2^31 的话,立即执行。
  • args: ..., 额外的参数,传入到指定的 callback 内,可选。

返回结果:

  • Timer, 返回定时器对象

由于 setHrInterval 的定时器会中断正在运行的代码执行回调,因此不要在回调函数内修改可能影响其它模块的数据,或者在回调中调用任何标记为 async 的 api 函数,否则将会产生不可预知的结果。例如:

1 2 3 4 5 6 7 8 9 10
var timers = require('timers'); var cnt = 0; timers.setHrInterval(() => { cnt++; }, 100); while (cnt < 10); console.error("===============================> done");

这段代码中,第 8 行的循环并不会因为 cnt 的改变而结束,因为 JavaScript 在优化代码时会认定在这个循环过程中 cnt 不会被改变。


clearHrInterval

清除指定的定时器

1
static global.clearHrInterval(Value t);

调用参数:

  • t: Value, 指定要清除的定时器

setImmediate

下一个空闲时间立即执行回调函数

1 2
static Timer global.setImmediate(Function callback, ...args);

调用参数:

  • callback: Function, 指定回调函数
  • args: ..., 额外的参数,传入到指定的 callback 内,可选。

返回结果:

  • Timer, 返回定时器对象

clearImmediate

清除指定的定时器

1
static global.clearImmediate(Value t);

调用参数:

  • t: Value, 指定要清除的定时器

btoa

base64 方式编码数据

1 2
static String global.btoa(Buffer data, Boolean url = false);

调用参数:

  • data: Buffer, 要编码的数据
  • url: Boolean, 指定是否使用 url 安全字符编码

返回结果:

  • String, 返回编码的字符串

atob

base64 方式解码字符串为二进制数据

1
static Buffer global.atob(String data);

调用参数:

  • data: String, 要解码的字符串

返回结果:

  • Buffer, 返回解码的二进制数据

gc

强制要求进行垃圾回收

1
static global.gc();

静态属性

global

Object, 全局对象

1
static readonly Object new global;

globalThis

Object, 全局对象

1
static readonly Object global.globalThis;