vm.runInNewContext()方法將聲明的contextObject上下文化,編譯所編寫的代碼並在創建的上下文中運行它,然後所有這些返回輸出。但是,正在運行的代碼無法訪問本地作用域。
用法:
vm.runInNewContext( code, contextObject, options )
參數:此方法接受上述和以下所述的三個參數:
- code:它是要編譯和運行的JavaScript代碼。
- contextObject:這是一個將被上下文化的對象,如果未定義,將創建一個新對象。
- options:它是一個可選參數,返回Object或string,如果它是字符串,則它定義返回string的文件名。它具有以下參數:
- filename:它包含一個字符串,該字符串指定此腳本生成的堆棧跟蹤中使用的文件名。默認值為“ evalmachine.anonymous”。
- lineOffset:它包含一個數字,該數字指定此腳本生成的堆棧跟蹤中顯示的行號的偏移量。默認值為0。
- columnOffset:它包含一個數字,該數字指定此腳本生成的堆棧跟蹤中顯示的列號的偏移量。默認值為0。
- displayErrors:它包含一個布爾值,即如果在編譯代碼時引發錯誤,並且由於該原因而引發錯誤的代碼行鏈接到堆棧跟蹤,則為true。默認值為true。
- timeout:它包含一個整數值,該整數指定在結束執行之前執行指定代碼所花費的毫秒數。但是,如果關閉執行,則將發生錯誤,並且此值必須絕對為正整數。
- breakOnSigint:它擁有一個布爾值。如果為true,則在提供SIGINT即(Ctrl + C)後將立即停止執行。並且如果執行停止,則會引發錯誤。默認情況下,其值為false。
- contextName:它包含一個字符串。它是新生成的上下文的可讀名稱。默認情況下是“ VM Context i”,其中,i是所生成的上下文的索引,該索引以數字形式遞增。
- contextOrigin:它包含一個字符串。它是與最近生成的上下文等效的來源。此外,原點必須像URL一樣形成。其默認值為“”。
- contextCodeGeneration:它是對象類型。
它具有以下參數:- strings:它包含一個布爾值,如果將其設置為false,則對函數構造函數或eval的任何調用都將引發錯誤,即EvalError。其默認值為true。
- wasm:它擁有一個布爾值。如果將其設置為false,則任何嘗試編譯WebAssembly模塊的嘗試都將引發錯誤,即WebAssembly.CompileError。默認情況下,其值為true。
- cachedData:它包含一個Buffer,TypedArray或DataView。在V8的代碼緩存數據的幫助下,它提供了可選的Buffer或TypedArray或DataView以供提供的源使用。之後,可以將cachedDataRejected的值設置為true或false。這取決於V8對數據的接收。
- produceCachedData:它擁有一個布爾值。如果其true和cachedData不再可用,則V8嘗試輸出該代碼的代碼緩存數據。如果完成此操作,則會生成一個包含V8代碼緩存數據的緩衝區,然後將其存儲在要返回的vm.Script實例的cachedData中。此外,根據代碼緩存數據,將cachedDataProduced值設置為true或false。但是,不建議使用此選項並使用script.createCachedData()代替。默認情況下,其值為false。
- importModuleDynamically:當調用import()方法時,它具有在評估此模塊時調用的函數。並且,如果未指定此選項,則對import()的調用將被拒絕,並出現錯誤。它具有以下參數:
- specifier:它包含一個字符串。它是傳遞給import()方法的說明符。
- module:它包含vm.Module。它返回模塊命名空間對象或vm.Module。
返回值:它返回腳本中執行的最後一條語句的結果。
以下示例說明了Node.js中vm.runInNewContext()方法的使用:
範例1:
// Node.js program to demonstrate the
// vm.runInNewContext() method
// Including util and vm module
const util = require('util');
const vm = require('vm');
// Creating contextObject
const obj = {
portal:'GeeksforGeeks',
authors:30
};
// Calling runInNewContext method
// with its parameters
vm.runInNewContext('authors *= 3;', obj);
// Displays output
console.log(obj);
輸出:
{ portal:'GeeksforGeeks', authors:90 }
在這裏,輸出中的作者為90 as(30 * 3 = 90)。
範例2:
// Node.js program to demonstrate the
// vm.runInNewContext() method
// Including util and vm module
const util = require('util');
const vm = require('vm');
// Creating contextObject
const contextobj = {localVar:20};
// Calling runInNewContext method
// with its parameters
var x = vm.runInNewContext('localVar +=(3*3);',
contextobj, 2, 'myfile.vm');
// Displays output
console.log(contextobj);
console.log(x);
輸出:
{ localVar:29 } 29
參考: https://nodejs.org/api/vm.html#vm_vm_runinnewcontext_code_contextobject_options
相關用法
- Node.js GM chop()用法及代碼示例
- Node.js GM edge()用法及代碼示例
- Node.js GM drawRectangle()用法及代碼示例
- Node.js GM write()用法及代碼示例
- Node.js GM whiteThreshold()用法及代碼示例
- Node.js GM border()用法及代碼示例
- Node.js GM magnify()用法及代碼示例
- Node.js GM channel()用法及代碼示例
- Node.js GM minify()用法及代碼示例
注:本文由純淨天空篩選整理自nidhi1352singh大神的英文原創作品 Node.js | vm.runInNewContext() Method。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。