2017-09-10 1 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 개발자 콘솔에는이 동작이 표시되지 않습니다. 명시 적으로 입력을 표현식으로 해석합니까 아니면 거기에 다른 트릭이 있습니까? –

관련 문제