节点 VM - Return 隐式对象

Node VM - Return an object implicitly

我正在寻找一种在 Node JS 中执行一些简单脚本的方法并发现了 VM module。文档指定 运行* 方法 return 执行的结果,所以我认为 "Hey, why not just return an object that way and then call on its properties in my main script?"

所以我启动了一个 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 :
>

不完全是预期的结果。有趣的是,如果我 return 赋值的结果...

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

谁能给我解释一下这种行为?

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