手机版

NodeJs中虚拟机模块的详细说明

时间:2021-09-09 来源:互联网 编辑:宝哥软件园 浏览:

什么是虚拟机?

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

通过VM,JS可以立即编译执行,也可以编译保存以后执行(JavaScript代码可以立即编译运行,也可以以后编译保存运行。)VM模块包含三种常用的创建独立运行的沙盒系统的方法,如下:VM。runinthiscontext(代码,文件名);

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

此外,代码的内部全局和外部共享副本代码如下: var VM=require(' VM ');var p=5;global.p=11VM . runiniscontext(' console . log(' ok,p '));//在global下显示11vm . runintiscontext(' console . log(global)');//显示globalconsole.log//display 5vm.runInContext(代码,SandBox);

这个方法用来创建一个独立的沙盒运行空间。沙盒将作为全局变量传递到代码中,但是没有全局变量

sandBox要求由vm.createContext()方法创建的SandBox副本代码如下: var VM=require(' VM ');var util=require(' util ');var window={ p: 2,vm: vm,console: console,require : require };var p=5;global.p=11vm.createContext(窗口);VM . runincontext(' p=3;console . log(global的类型;),窗口);//global是undefinedconsole . log(window . p);//改为3 con sole . log(util . inspect(window));vm.runInNewContext(代码、沙箱、opt);这个方法应该与runInContext相同,但是缺少创建sandBox的步骤

比较

在更复杂的情况下,如果在runiniscontext中执行runiniscontext会发生什么,runiniscontext访问的是runiniscontext的全局对象?

下面的代码将如何执行?

复制代码如下: var VM=require(' VM ');var util=require(' util ');var window={ p: 2,vm: vm,console: console,require : require };window.global=windowvar p=5;global.p=11VM . RunninNewContext(' p=3;console.log(全局类型);需要(\'vm\ ')。runiniscontext(' console . log(p)');',窗口);

runInThisContext里面的代码可以访问外部全局对象,但是外面其实没有全局对象(虽然有,但本质上不是全局对象)。请记住,runInThisContext只能访问顶级全局对象。

执行结果如下:复制代码如下:object(全局存在)11(顶部全局的p)

版权声明:NodeJs中虚拟机模块的详细说明是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。