Node.js script.runInThisContext

🌙
手机阅读
本文目录结构

Node.js script.runInThisContext(code[, options])

新增于: v0.3.1

  • code < string> 将被编译和运行的JavaScript代码
  • options
    • filename < string> 定义供脚本生成的堆栈跟踪信息所使用的文件名
    • lineOffset < number> 定义脚本生成的堆栈跟踪信息所显示的行号偏移
    • columnOffset < number> 定义脚本生成的堆栈跟踪信息所显示的列号偏移
    • displayErrors < boolean> 当值为真的时候,假如在解析代码的时候发生错误Error,引起错误的行将会被加入堆栈跟踪信息
    • timeout < number> 定义在被终止执行之前此code被允许执行的最大毫秒数。假如执行被终止,将会抛出一个错误Error

vm.runInThisContext()在当前的global对象的上下文中编译并执行code,最后返回结果。运行中的代码无法获取本地作用域,但可以获取当前的global对象。

下面的例子演示了使用vm.runInThisContext()和JavaScript的eval()方法去执行相同的一段代码:

const vm = require('vm');
let localVar = 'initial value';

const vmResult = vm.runInThisContext('localVar = "vm";');
console.log('vmResult:', vmResult);
console.log('localVar:', localVar);

const evalResult = eval('localVar = "eval";');
console.log('evalResult:', evalResult);
console.log('localVar:', localVar);

// vmResult: 'vm', localVar: 'initial value'
// evalResult: 'eval', localVar: 'eval'

正因vm.runInThisContext()无法获取本地作用域,故localVar的值不变。相反,eval()确实能获取本地作用域,所以localVar的值被改变了。如此看来, vm.runInThisContext()更像是间接的执行eval(), 就像(0, eval)(‘code’)


更多内容请参考:Node.js vm,或者通过 点击对应菜单 进行查看;



AXIHE / 精选资源

浏览全部教程

面试题

学习网站

前端培训
自己甄别

前端书籍

关于朱安邦

我叫 朱安邦,阿西河的站长,在杭州。

以前是一名平面设计师,后来开始接接触前端开发,主要研究前端技术中的JS方向。

业余时间我喜欢分享和交流自己的技术,欢迎大家关注我的 Bilibili

关注我: Github / 知乎

目前重心已经放在研究区块链上面了

我叫朱安邦,阿西河的站长

目前在杭州从事区块链周边的开发工作,机械专业,以前从事平面设计工作。

2014年底脱产在老家自学6个月的前端技术,自学期间几乎从未出过家门,最终找到了满意的前端工作。更多>