ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
# 执行 JavaScript ~~~ 稳定度: 3 - 稳定 ~~~ 你可以这样引入此模块: ~~~ var vm = require('vm'); ~~~ JavaScript 代码可以被编译并立即执行,也可以在编译后保存,留到稍后执行。 ### vm.runInThisContext(code, [options]) `vm.runInThisContext()` 对 `code` 进行编译、运行并返回结果。 被运行的代码没有对本地作用域 (local scope) 的访问权限,但是可以访问当前的 `global` 对象。 使用 `vm.runInThisContext` 和 `eval` 分别执行相同的代码: ~~~ // vmResult: 'vm', localVar: 'initial value' // evalResult: 'eval', localVar: 'eval' ~~~ `vm.runInThisContext` 无法访问本地作用域,因此 `localVar` 没有被改变。 `eval` 可以访问本地作用域,因此 `localVar` 被改变。 这种情况下 `vm.runInThisContext` 可以看作一种 [间接的 `eval` 调用](http://es5.github.io/#x10.4.2), 如 `(0,eval)('code')`。但是 `vm.runInThisContext` 也提供下面几个额外的参数: - `filename`: 允许您更改显示在站追踪 (stack trace) 中的文件名 - `displayErrors`: 是否在抛出异常前输出带高亮错误代码行的错误信息到 stderr。 将会捕捉所有在编译 `code` 的过程中产生的语法错误以及执行过程中产生的运行时错误。 默认为 `true` - `timeout`: 以毫秒为单位规定 `code` 允许执行的时间。在执行过程中被终止时会有 `Error` 抛出。 ### vm.createContext([sandbox]) 如提供 `sandbox` 对象则将