script.runInContext(contextifiedObject[, options])
-
contextifiedObject<Object>vm.createContext()方法返回的 contextified 对象。¥
contextifiedObject<Object> A contextified object as returned by thevm.createContext()method. -
options<Object>-
displayErrors<boolean> 当为true时,如果编译code时出现Error,则导致错误的代码行会附加到堆栈跟踪中。默认值:true。¥
displayErrors<boolean> Whentrue, if anErroroccurs while compiling thecode, the line of code causing the error is attached to the stack trace. Default:true. -
timeout<integer> 指定终止执行前执行code的毫秒数。如果执行终止,则将抛出Error。此值必须是严格的正整数。¥
timeout<integer> Specifies the number of milliseconds to executecodebefore terminating execution. If execution is terminated, anErrorwill be thrown. This value must be a strictly positive integer. -
breakOnSigint<boolean> 如果是true,接收SIGINT(Ctrl+C)将终止执行并抛出Error。已通过process.on('SIGINT')附加的事件的现有句柄在脚本执行期间被禁用,但在此之后继续工作。默认值:false。¥
breakOnSigint<boolean> Iftrue, receivingSIGINT(Ctrl+C) will terminate execution and throw anError. Existing handlers for the event that have been attached viaprocess.on('SIGINT')are disabled during script execution, but continue to work after that. Default:false.
-
-
返回:<any> 脚本中最后一条语句执行的结果。
¥Returns: <any> the result of the very last statement executed in the script.
在给定的 contextifiedObject 中运行 vm.Script 对象包含的编译代码并返回结果。运行代码无权访问本地作用域。
¥Runs the compiled code contained by the vm.Script object within the given
contextifiedObject and returns the result. Running code does not have access
to local scope.
下面的示例编译代码,增加一个全局变量,设置另一个全局变量的值,然后多次执行代码。全局变量包含在 context 对象中。
¥The following example compiles code that increments a global variable, sets
the value of another global variable, then execute the code multiple times.
The globals are contained in the context object.
const vm = require('node:vm');
const context = {
animal: 'cat',
count: 2,
};
const script = new vm.Script('count += 1; name = "kitty";');
vm.createContext(context);
for (let i = 0; i < 10; ++i) {
script.runInContext(context);
}
console.log(context);
// Prints: { animal: 'cat', count: 12, name: 'kitty' } 使用 timeout 或 breakOnSigint 选项将导致新的事件循环和相应的线程被启动,其性能开销非零。
¥Using the timeout or breakOnSigint options will result in new event loops
and corresponding threads being started, which have a non-zero performance
overhead.