Javascript: new Function() and eval()
Javascript: new Function() and eval()
我很困惑。。。为什么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"
转义序列由外部字符串解释。你必须把反斜杠加倍。
相关文章:
- 递归使用 eval() 是检查程序执行的好方法吗?
- 为什么忽略了eval()代码中的语法错误
- Selenium WebDriver and JavaScript change
- 推荐在JavaScript中执行存储为字符串的函数,而不是使用eval
- Javascript eval()无法处理传递的字符串
- PHP and Javascript functions
- Javascript Return and if/else
- SetTimeout and clearTimeout in Javascript
- lightbox in html 5 and javascript
- TimelineJS and AngularJS
- timeago.js with datatable and PHP
- javascript button ajax and php
- Ajax and Json with Rails
- 调用绕过eval()的函数
- Combine onload, onresize and onclick
- JavaScript eval() and const
- onClientClick with JavaScript function and eval
- JQuery and Eval
- Javascript: new Function() and eval()
- JS eval() and XSS