# 執(zhí)行 JavaScript
~~~
穩(wěn)定度: 3 - 穩(wěn)定
~~~
你可以這樣引入此模塊:
~~~
var vm = require('vm');
~~~
JavaScript 代碼可以被編譯并立即執(zhí)行,也可以在編譯后保存,留到稍后執(zhí)行。
### vm.runInThisContext(code, [options])
`vm.runInThisContext()` 對 `code` 進行編譯、運行并返回結(jié)果。 被運行的代碼沒有對本地作用域 (local scope) 的訪問權(quán)限,但是可以訪問當(dāng)前的 `global` 對象。
使用 `vm.runInThisContext` 和 `eval` 分別執(zhí)行相同的代碼:
~~~
// vmResult: 'vm', localVar: 'initial value'
// evalResult: 'eval', localVar: 'eval'
~~~
`vm.runInThisContext` 無法訪問本地作用域,因此 `localVar` 沒有被改變。 `eval` 可以訪問本地作用域,因此 `localVar` 被改變。
這種情況下 `vm.runInThisContext` 可以看作一種 [間接的 `eval` 調(diào)用](http://es5.github.io/#x10.4.2), 如 `(0,eval)('code')`。但是 `vm.runInThisContext` 也提供下面幾個額外的參數(shù):
- `filename`: 允許您更改顯示在站追蹤 (stack trace) 中的文件名
- `displayErrors`: 是否在拋出異常前輸出帶高亮錯誤代碼行的錯誤信息到 stderr。 將會捕捉所有在編譯 `code` 的過程中產(chǎn)生的語法錯誤以及執(zhí)行過程中產(chǎn)生的運行時錯誤。 默認為 `true`
- `timeout`: 以毫秒為單位規(guī)定 `code` 允許執(zhí)行的時間。在執(zhí)行過程中被終止時會有 `Error` 拋出。
### vm.createContext([sandbox])
如提供 `sandbox` 對象則將
