2017-09-10 7 views
0

ノードJSで簡単なスクリプトを実行する方法を探していて、VM moduleを発見しました。ドキュメンテーションは、run *メソッドが実行結果を返すように指定しています。だから、 "ちょっと、オブジェクトをそのまま返し、メインスクリプトのプロパティを呼び出すのはなぜですか?ノードVM - 暗黙的にオブジェクトを返す

$ 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 : 
> 

ない、非常に期待される結果:

は、だから私は、ノードのREPLを起動します。面白いことに、割り当ての結果を返すと...

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

誰かがこの動作を私に説明できますか?

+0

オブジェクトリテラルは有効なステートメントではありません。 – Bergi

答えて

1

v8は、中括弧をラベルを含むコードブロックとして解釈しています。かっこで囲む:vm.runInNewContext("({foo: 'bar', baz: 'qux'})")

+0

ありがとう! Javascriptにもラベルが付いていることは知られていませんでした。ノードREPLとChrome開発者コンソールではこの動作が発生しません。明示的に入力を式として解釈するのでしょうか? –

関連する問題