执行包含<script>标签的字符串形式JavaScript代码时遇语法错误的技术咨询
解决执行字符串形式JS代码时的「unexpected token '<'」错误
嘿,我明白你遇到的问题了——你把HTML的<script>标签当成了JS代码的一部分传给setTimeout和new Function,这就是报错的根源!
问题出在哪?
setTimeout的字符串参数、new Function的参数,本质上都是纯JavaScript代码片段,而不是HTML代码。当JS解析器看到<script>这个HTML标签时,它完全不知道这是什么玩意儿,<符号在JS语法里是比较运算符,出现在代码开头就会触发语法错误,也就是你看到的「unexpected token '<'」。
正确的写法
你只需要把<script>标签去掉,直接传入要执行的JS代码即可:
1. 修复setTimeout的写法
// 字符串形式(能解决问题,但不推荐) setTimeout('console.log("some string")', 1); // 更推荐的函数形式(无语法风险,调试更方便) setTimeout(() => { console.log("some string"); }, 1);
2. 修复new Function的写法
注意new Function只是创建一个函数,你需要手动调用它才能执行代码:
// 创建并执行函数 new Function('console.log("some string")')();
额外提醒
尽量避免用字符串形式传递JS代码给setTimeout或new Function:
- 存在XSS安全风险:如果字符串来自用户输入,很容易被注入恶意代码;
- 代码解析会有额外性能开销;
- 调试难度大:字符串形式的代码无法直接断点调试。
内容的提问来源于stack exchange,提问作者Mukul Sharma




