2016-08-19 2 views
1

Node.js에 매우 원시적 인 온라인 인터프리터/컴파일러를 만들어 여러 언어로 사용하고 JS를 실행할 때 아주 이상한 문제가 발생했습니다. 암호.Eval()에 오류가 발생하는 완벽한 JavaScript 구문

사용자가 글을 올리면 입력을 받아 조금 벗어나 명령 행에 직접 입력합니다 (끔찍한 연습이지만, 나중에는 새로운 시스템으로 옮길 것입니다. 직접 CMD) 이것은 큰 따옴표와 \ n, \ r 등을 이스케이프 처리합니다.

명령을 입력하면 (예, 콜백을 제공하지만,

,617 : t의 싱크)은

let parentResults = cp.exec(`node ./builders/${this.builder}.js "${this.escapedCode}"`); 
// First parameter represents the builder to run the user input with 
// and escaped code is self-explanatory 

JS 하나만 선이 처리 빌더 쓸 필요 이제

eval(process.argv[2]); // Already somewhat-escaped code 

, 내가

function foo(x) { 
    console.log(x); 
} 

foo(5); 

뭔가를 쓰기 나는 5의 콘솔에서 올바른 출력을 얻을. 내가

let foo = function(x) { 
    console.log(x); 
} 

foo(5); 

처럼 뭔가를 할 때

는하지만 나뿐만 아니라 화살표 구문을 사용할 때 같은 일이 발생

console.log(x); 
^

SyntaxError: Unexpected identifier 

말하는 오류가 발생합니다. 나는 그것을 망쳐 놓을 수있는 단서가 없다. 어떤 아이디어 또는 도움?

답변

3

두 번째 경우는 이후에 ;이 누락되었다는 것이 문제라고 생각합니다. 일반적으로 자바 스크립트가 선언의 끝으로 \n을 해석하므로 문제가되지 않지만 \n을 제거한다고 말하면서 실패합니다.

+0

스튜어트가 편집하기 전에 코드의 실패에 대한 귀하의 답변이 더 나은 설명을 제공했기 때문에 가장 좋은 답으로 선택되었습니다. –

2

두 번째 예제에서 누락 된 세미콜론으로 인해 트리핑이 발생합니다. 그것은해야한다 :

let foo = function(x) { 
    console.log(x); 
}; 

foo(5); 

빌더 그렇지 않으면 자바 스크립트가 세미콜론의 부재를 처리 할 수 ​​있도록 할 것 개행 문자를 제거하는 것으로 보인다. (js가 자동으로 세미콜론을 삽입 할 수있는시기에 대한 자세한 설명은 here을 참조하십시오.

+0

실수가 쉽지 않을 것이라고 생각했습니다. 감사! –

관련 문제