新聞中心
穩(wěn)定性: 3 - 穩(wěn)定
本節(jié)介紹了node.js的虛擬機(jī)(VM)模塊,該模塊提供了用于在V8虛擬機(jī)上下文中編譯和運(yùn)行代碼的API。

創(chuàng)新互聯(lián)公司主營(yíng)陵水黎族網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,成都app軟件開發(fā)公司,陵水黎族h5微信小程序開發(fā)搭建,陵水黎族網(wǎng)站營(yíng)銷推廣歡迎陵水黎族等地區(qū)企業(yè)咨詢
可以通過(guò)以下方法訪問(wèn)該模塊:
var vm = require('vm');
JavaScript 可以立即編譯立即執(zhí)行,也可以編譯,保存,之后再運(yùn)行。
vm.runInThisContext(code[, options])
vm.runInThisContext()對(duì)參數(shù)code編譯,運(yùn)行并返回結(jié)果。運(yùn)行的代碼沒(méi)有權(quán)限訪問(wèn)本地作用域(local scope),但是可以訪問(wèn)全局對(duì)象。
使用vm.runInThisContext和eval方法運(yùn)行同樣代碼的例子:
var localVar = 'initial value';
var vmResult = vm.runInThisContext('localVar = "vm";');
console.log('vmResult: ', vmResult);
console.log('localVar: ', localVar);
var evalResult = eval('localVar = "eval";');
console.log('evalResult: ', evalResult);
console.log('localVar: ', localVar);
// vmResult: 'vm', localVar: 'initial value'
// evalResult: 'eval', localVar: 'eval'
vm.runInThisContext沒(méi)有訪問(wèn)本地作用域,所以沒(méi)有改變localVar。eval范圍了本地作用域,所以改變了localVar。
vm.runInThisContext用起來(lái)很像間接調(diào)用eval,比如(0,eval)('code')。但是,vm.runInThisContext也包含以下選項(xiàng):
filename: 允許更改顯示在站追蹤(stack traces)的文件名。displayErrors: 是否在stderr上打印錯(cuò)誤,拋出異常的代碼行高亮顯示。會(huì)捕獲編譯時(shí)的語(yǔ)法錯(cuò)誤,和執(zhí)行時(shí)拋出的錯(cuò)誤。默認(rèn)為true。timeout: 中斷前代碼執(zhí)行的毫秒數(shù)。如果執(zhí)行終止,將會(huì)拋出錯(cuò)誤。
vm.createContext([sandbox])
如果參數(shù)sandbox不為空,調(diào)用vm.runInContext或script.runInContext時(shí)可以調(diào)用沙箱的上下文。以此方式運(yùn)行的腳本,sandbox是全局對(duì)象,它保留自己的屬性同時(shí)擁有標(biāo)準(zhǔn)全局對(duì)象(global object)擁有的內(nèi)置對(duì)象和函數(shù)。
如果參數(shù)sandbox對(duì)象為空,返回一個(gè)可用的新且空的上下文相關(guān)的沙盒對(duì)象。
這個(gè)函數(shù)對(duì)于創(chuàng)建一個(gè)可運(yùn)行多腳本的沙盒非常有用。比如,在模擬瀏覽器的時(shí)候可以使用該函數(shù)創(chuàng)建一個(gè)用于表示window全局對(duì)象的沙箱,并將所有


咨詢
建站咨詢