我很困惑...为什么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:我知道,这种代码很讨厌 - 我只是好奇......
答案 0 :(得分:3)
> console.log('\"d\"')
"d"
转义序列由外部字符串解释。你必须加倍反斜杠。
答案 1 :(得分:3)
问题只是解析时\"
变为"
,因此您的代码变为:
new Function("b", "c", "a(b,c); eval("d")(b,c);")
如您所见,这是无效的。解决方案:加倍反斜杠:\\"d\\"
应该这样做。