Javascript: new Function() and eval()

Javascript: new Function() and eval()

本文关键字:eval and Function new Javascript      更新时间:2023-09-26

我很困惑。。。为什么eval的第一行有效,而第二行无效?嵌套evals和函数定义中是否存在限制,或者是否存在其他语法错误?

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:我知道,这种代码很讨厌——我只是好奇。。。

问题只是'"在解析时变成",因此您的代码变成:

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

正如你所看到的,这是无效的。解决方案:将反斜杠加倍:''"d''"应该这样做。

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

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