Javascript:new Function()和eval()

时间:2014-10-10 15:53:54

标签: javascript

我很困惑...为什么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:我知道,这种代码很讨厌 - 我只是好奇......

2 个答案:

答案 0 :(得分:3)

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

转义序列由外部字符串解释。你必须加倍反斜杠。

答案 1 :(得分:3)

问题只是解析时\"变为",因此您的代码变为:

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

如您所见,这是无效的。解决方案:加倍反斜杠:\\"d\\"应该这样做。