# 执行 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` 对象则将