vm.runInNewContext()方法将声明的contextObject上下文化,编译所编写的代码并在创建的上下文中运行它,然后所有这些返回输出。但是,正在运行的代码无法访问本地作用域。
用法:
vm.runInNewContext( code, contextObject, options )
参数:此方法接受上述和以下所述的三个参数:
- code:它是要编译和运行的JavaScript代码。
- contextObject:这是一个将被上下文化的对象,如果未定义,将创建一个新对象。
- options:它是一个可选参数,返回Object或string,如果它是字符串,则它定义返回string的文件名。它具有以下参数:
- filename:它包含一个字符串,该字符串指定此脚本生成的堆栈跟踪中使用的文件名。默认值为“ evalmachine.anonymous”。
- lineOffset:它包含一个数字,该数字指定此脚本生成的堆栈跟踪中显示的行号的偏移量。默认值为0。
- columnOffset:它包含一个数字,该数字指定此脚本生成的堆栈跟踪中显示的列号的偏移量。默认值为0。
- displayErrors:它包含一个布尔值,即如果在编译代码时引发错误,并且由于该原因而引发错误的代码行链接到堆栈跟踪,则为true。默认值为true。
- timeout:它包含一个整数值,该整数指定在结束执行之前执行指定代码所花费的毫秒数。但是,如果关闭执行,则将发生错误,并且此值必须绝对为正整数。
- breakOnSigint:它拥有一个布尔值。如果为true,则在提供SIGINT即(Ctrl + C)后将立即停止执行。并且如果执行停止,则会引发错误。默认情况下,其值为false。
- contextName:它包含一个字符串。它是新生成的上下文的可读名称。默认情况下是“ VM Context i”,其中,i是所生成的上下文的索引,该索引以数字形式递增。
- contextOrigin:它包含一个字符串。它是与最近生成的上下文等效的来源。此外,原点必须像URL一样形成。其默认值为“”。
- contextCodeGeneration:它是对象类型。
它具有以下参数:- strings:它包含一个布尔值,如果将其设置为false,则对函数构造函数或eval的任何调用都将引发错误,即EvalError。其默认值为true。
- wasm:它拥有一个布尔值。如果将其设置为false,则任何尝试编译WebAssembly模块的尝试都将引发错误,即WebAssembly.CompileError。默认情况下,其值为true。
- cachedData:它包含一个Buffer,TypedArray或DataView。在V8的代码缓存数据的帮助下,它提供了可选的Buffer或TypedArray或DataView以供提供的源使用。之后,可以将cachedDataRejected的值设置为true或false。这取决于V8对数据的接收。
- produceCachedData:它拥有一个布尔值。如果其true和cachedData不再可用,则V8尝试输出该代码的代码缓存数据。如果完成此操作,则会生成一个包含V8代码缓存数据的缓冲区,然后将其存储在要返回的vm.Script实例的cachedData中。此外,根据代码缓存数据,将cachedDataProduced值设置为true或false。但是,不建议使用此选项并使用script.createCachedData()代替。默认情况下,其值为false。
- importModuleDynamically:当调用import()方法时,它具有在评估此模块时调用的函数。并且,如果未指定此选项,则对import()的调用将被拒绝,并出现错误。它具有以下参数:
- specifier:它包含一个字符串。它是传递给import()方法的说明符。
- module:它包含vm.Module。它返回模块命名空间对象或vm.Module。
返回值:它返回脚本中执行的最后一条语句的结果。
以下示例说明了Node.js中vm.runInNewContext()方法的使用:
范例1:
// Node.js program to demonstrate the
// vm.runInNewContext() method
// Including util and vm module
const util = require('util');
const vm = require('vm');
// Creating contextObject
const obj = {
portal:'GeeksforGeeks',
authors:30
};
// Calling runInNewContext method
// with its parameters
vm.runInNewContext('authors *= 3;', obj);
// Displays output
console.log(obj);
输出:
{ portal:'GeeksforGeeks', authors:90 }
在这里,输出中的作者为90 as(30 * 3 = 90)。
范例2:
// Node.js program to demonstrate the
// vm.runInNewContext() method
// Including util and vm module
const util = require('util');
const vm = require('vm');
// Creating contextObject
const contextobj = {localVar:20};
// Calling runInNewContext method
// with its parameters
var x = vm.runInNewContext('localVar +=(3*3);',
contextobj, 2, 'myfile.vm');
// Displays output
console.log(contextobj);
console.log(x);
输出:
{ localVar:29 } 29
参考: https://nodejs.org/api/vm.html#vm_vm_runinnewcontext_code_contextobject_options
相关用法
- Node.js GM chop()用法及代码示例
- Node.js GM edge()用法及代码示例
- Node.js GM drawRectangle()用法及代码示例
- Node.js GM write()用法及代码示例
- Node.js GM whiteThreshold()用法及代码示例
- Node.js GM border()用法及代码示例
- Node.js GM magnify()用法及代码示例
- Node.js GM channel()用法及代码示例
- Node.js GM minify()用法及代码示例
注:本文由纯净天空筛选整理自nidhi1352singh大神的英文原创作品 Node.js | vm.runInNewContext() Method。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。