NodeJs的虚拟机模块的详细解决方案

什么是虚拟机

虚拟机模块是NodeJS的核心模块,支持运行机制需要方法和Nodejs。有时我们可能还需要使用VM模板来做一些特殊的事情。

通过VM,js可以立即执行、编译或保存,然后再执行(Javascript代码可以立即编译或运行)。

VM模块包含三种常用的方法,用于创建独立运行的沙箱系统,这是以下三种方法

Vm.runInThisContext(代码,文件名);

此方法用于创建独立的沙箱运行空间,代码内的代码可以访问外部全局对象,但不能访问其他变量。

代码内部全局和外部共享

复制代码代码如下所示:

var(=VM);



var = 5;

全局,p=11;



Vm.runInThisContext(console.log(好吧,P) / /显示);在全球11

Vm.runInThisContext(console.log(全球)); / /全球



console.log(P); / / 5

Vm.runInContext(代码,沙箱);



此方法用于创建独立的沙箱运行空间,沙箱将用作全局变量到代码中,但没有全局变量。

沙箱的要求是由vm.createcontext创建沙箱()方法

复制代码代码如下所示:

var(=VM);

VaR工具=需要(工具);



var窗口{ {

p:2,

虚拟机,

控制台:控制台,

要求:要求

};



var = 5;



全局,p=11;



Vm.createContext(窗口);

Vm.runInContext(P = 3;console.log(typeof全球);窗口); / /全球未定义



console.log(窗口。P); / /已改为3



console.log(util.inspect(窗口));

Vm.runInNewContext(代码,沙箱,OPT);



这种方法应该是runincontext相同,但有较少的步骤创建沙箱

比较



更复杂的情况

这runinthiscontext访问如果runinthiscontext要执行runincontext全局对象是谁

下面的代码将如何执行

复制代码代码如下所示:

var(=VM);

VaR工具=需要(工具);



var窗口{ {

p:2,

虚拟机,

控制台:控制台,

要求:要求

};



window.global =窗口;



var = 5;



全局,p=11;



Vm.runInNewContext(P = 3;console.log(typeof(全球);需要'vm )。RunInThisContext(console.log(P));,窗口);



在runinthiscontext代码可以访问外部全局对象,但其实是没有全局对象之外(虽然有,但本质不是全局对象)。我们只要记住一件事,runinthiscontext只能访问全球顶级对象,好。

执行的结果如下

复制代码代码如下所示:

对象(全局存在)

11(P在全球最高)