2014-10-10 55 views
0

我很困惑......爲什麼eval的第一行工作正常,但第二行不行?在嵌套evals和函數定義中是否存在限制,還是存在其他語法錯誤?Javascript:new Function()和eval()

function a(b,c) {console.warn(b+c);} 
function d(b,c) {console.warn(b*c);} 

eval('new Function("b", "c", "a(b,c); d(b,c);")')(4,5); // working 
eval('new Function("b", "c", "a(b,c); eval(\"d\")(b,c);")')(4,5); // not working 

PS:我知道,這種代碼是討厭的 - 我只是好奇......

回答

3

的問題很簡單,\"成爲"解析的時候,讓你的代碼變得:

new Function("b", "c", "a(b,c); eval("d")(b,c);") 

正如你可以看到,這是無效的。解決方案:雙擊你的反斜槓:\\"d\\"應該這樣做。

3
> console.log('\"d\"') 
"d" 

轉義序列由外串解釋。你必須加倍反斜槓。

+0

史詩般的失敗! - 非常感謝你! – Markus 2014-10-10 16:00:57

相關問題