节点VM - 隐式返回对象

时间:2017-09-10 16:49:33

标签: javascript node.js v8

我一直在寻找一种在Node JS中做一些简单脚本的方法,并发现了VM module。文档指定run *方法返回执行结果,所以我想“嘿,为什么不直接返回一个对象,然后在我的主脚本中调用它的属性?”

所以我启动了一个Node REPL:

$ node
> var vm = require('vm');
undefined
> vm.runInNewContext("{ foo: 'bar' }")
'bar'
> vm.runInNewContext("{ foo: 'bar', baz: 'qux' }")
evalmachine.<anonymous>:1
{ foo: 'bar', baz: 'qux' }
                 ^
SyntaxError: Unexpected token :
>

不完全是预期的结果。有趣的是,如果我返回作业的结果......

> vm.runInNewContext("exports = { foo: 'bar', baz: 'qux' }")
{ foo: 'bar', baz: 'qux' }

有人可以向我解释这种行为吗?

1 个答案:

答案 0 :(得分:1)

v8将大括号解释为包含标签的代码块。用括号括起来:vm.runInNewContext("({foo: 'bar', baz: 'qux'})")