# 執行 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` 對象則將