vm.runInThisContext(code[, options])
历史
版本 | 变化 |
---|---|
v17.0.0、v16.12.0 | 向 |
v6.3.0 | 现在支持 |
v0.3.1 | 添加于:v0.3.1 |
参数
code
<string> 要编译和运行的 JavaScript 代码。options
<Object>|<string>filename
<string> 指定此脚本生成的堆栈跟踪中使用的文件名。 默认:'evalmachine.<anonymous>'
。lineOffset
<number> 指定在此脚本生成的堆栈跟踪中显示的行号偏移量。 默认:0
。columnOffset
<number> 指定在此脚本生成的堆栈跟踪中显示的first-line 列号偏移量。 默认:0
。displayErrors
<boolean> 当true
时,如果在编译code
时发生Error
true
。timeout
<integer> 指定在终止执行之前执行code
的毫秒数。如果执行终止,将抛出Error
breakOnSigint
<boolean>如果true
, 接收SIGINT
(Ctrl+C) 将终止执行并抛出一个Error
.已通过以下方式附加的事件的现有处理程序process.on('SIGINT')
在脚本执行期间被禁用,但之后继续工作。默认:false
.cachedData
<Buffer> | <TypedArray> | <DataView> 为提供的源提供可选的Buffer
或TypedArray
或DataView
以及 V8 的代码缓存数据。提供时,cachedDataRejected
值将根据 V8 对数据的接受情况设置为true
或false
。produceCachedData
<boolean>什么时候true
和不cachedData
存在时,V8 将尝试为code
.成功后,一个Buffer
使用 V8 的代码缓存数据将被生成并存储在cachedData
归还的属性vm.Script
实例。这cachedDataProduced
值将设置为true
或者false
取决于代码缓存数据是否产生成功。这个选项是已弃用有利于script.createCachedData()
.默认:false
.importModuleDynamically
<Function>在评估此模块时调用import()
叫做。如果未指定此选项,则调用import()
会拒绝ERR_VM_DYNAMIC_IMPORT_CALLBACK_MISSING
.此选项是实验模块 API 的一部分。我们不建议在生产环境中使用它。specifier
<string> 说明符传递给import()
script
<vm.Script>importAssertions
<Object>"assert"
值传递给optionsExpression
- 返回: <Module Namespace Object> | <vm.Module> 建议返回
vm.Module
以利用错误跟踪,并避免包含then
函数导出的命名空间出现问题。
- 返回: <any> 脚本中执行的最后一条语句的结果。
vm.runInThisContext()
编译 code
,在当前 global
的上下文中运行它并返回结果。运行代码无权访问本地范围,但可以访问当前的global
对象。
如果options
是字符串,则它指定文件名。
以下示例说明了使用 vm.runInThisContext()
和 JavaScript
函数来运行相同的代码:eval()
const vm = require('node:vm');
let localVar = 'initial value';
const vmResult = vm.runInThisContext('localVar = "vm";');
console.log(`vmResult: '${vmResult}', localVar: '${localVar}'`);
// Prints: vmResult: 'vm', localVar: 'initial value'
const evalResult = eval('localVar = "eval";');
console.log(`evalResult: '${evalResult}', localVar: '${localVar}'`);
// Prints: evalResult: 'eval', localVar: 'eval'
因为vm.runInThisContext()
无权访问本地范围,localVar
不变。相比之下,eval()
确实可以访问本地范围,所以值localVar
被改变。这样vm.runInThisContext()
很像一个间接 eval()
调用,例如(0,eval)('code')
.
相关用法
- Node.js vm.runInThisContext()用法及代码示例
- Node.js vm.runInNewContext()用法及代码示例
- Node.js vm.runInNewContext(code[, contextObject[, options]])用法及代码示例
- Node.js vm.runInContext()用法及代码示例
- Node.js vm.runInContext(code, contextifiedObject[, options])用法及代码示例
- Node.js vm.SyntheticModule.setExport(name, value)用法及代码示例
- Node.js vm.SourceTextModule.createCachedData()用法及代码示例
- Node.js vm.createContext([contextObject[, options]])用法及代码示例
- Node.js vm.Module用法及代码示例
- Node.js vm.isContext()用法及代码示例
- Node.js vm.measureMemory([options])用法及代码示例
- Node.js vm.SyntheticModule用法及代码示例
- Node.js vm.createContext()用法及代码示例
- Node.js vm.Script.createCachedData()用法及代码示例
- Node.js vm.Script.runInNewContext([contextObject[, options]])用法及代码示例
- Node.js vm.Script.runInThisContext([options])用法及代码示例
- Node.js vm.Script.runInContext(contextifiedObject[, options])用法及代码示例
- Node.js vm.Module.link(linker)用法及代码示例
- Node.js v8.getHeapSpaceStatistics()用法及代码示例
- Node.js v8.deserializer.readRawBytes()用法及代码示例
- Node.js v8.deserializer.readUint32()用法及代码示例
- Node.js v8.serializer.writeRawBytes()用法及代码示例
- Node.js v8.writeHeapSnapshot([filename])用法及代码示例
- Node.js v8.Deserializer.readUint32()用法及代码示例
- Node.js v8.getHeapCodeStatistics()用法及代码示例
注:本文由纯净天空筛选整理自nodejs.org大神的英文原创作品 vm.runInThisContext(code[, options])。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。