2016-08-19 31 views
1

我在Node.js中爲多種語言創建了一個非常原始的在線解釋器/編譯器,只是爲了體驗,而且我運行JS時遇到了一個非常奇怪的問題碼。在Eval()中創建完美的JavaScript語法錯誤()

當用戶發佈信息時,我會接受他們的輸入,稍微轉義一下,然後直接將其輸入到命令行中(可怕的做法,我知道,但以後我會轉移到新系統,而不涉及直接CMD)這個轉義雙引號和\ n,\ r等

當得到輸入,我child_process.exec它與命令(是的,我給它一個回調,但它是一個相當長的,我不'牛逼覺得有必要寫)

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

我認爲這個問題是您缺少在第二種情況下,};。通常這不會是一個問題,因爲JavaScript將\n解釋爲聲明的結尾,但是您說您將刪除\n,所以這就是它失敗的原因。

+0

被選爲最佳答案,因爲我覺得您的回答給出了在Stuart編輯之前代碼失敗的更好解釋。 –

2

第二個例子中的缺失分號正在跳閘。它應該是:

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

foo(5); 

你的建設者似乎被移除換行符,否則將允許JavaScript處理與缺少一個分號。 (見例如here更多的解釋就當JS可以自動插入一個分號。)

+0

我不認爲這可能是一個容易出錯。謝謝! –