【发布时间】:2021-12-19 23:41:12
【问题描述】:
我正在开发一个用于 Javascript 的 IDE,它允许 开发人员评估他们的代码。 在现代 Chrome 控制台中,我可以运行:
eval(`try{function foo3(){console.log("Hi")}} catch(err){console.log(err)}`)
和 foo3 将被定义并正常调用。 我也可以跑:
eval(`async function foo4(){console.log("Hi")}`)
和 foo4 将被定义并正常调用。 但是当我运行时:
eval(`try{async function foo5(){console.log("Hi")}} catch(err) {console.log(err)}`)
我没有收到任何错误,但 foo5 未定义。 请注意,示例 1 和 示例 3 只是“功能”之前的“异步”。 我希望 foo5 被定义。 非常感谢线索。
【问题讨论】:
-
块
{}中的函数声明由于 Web 兼容性原因而表现异常,通常最好避免。 This 好像也有关系 -
try/catch的意义何在?你永远不会仅仅从定义一个函数中得到一个异常。 -
感谢 Nick,它有助于实现 jS 的这个灰色地带。
-
Bergi,程序员可能为函数输入了错误的语法,所以外部的 try/catch 可以帮助捕捉到它。
-
@user1343035 不,它没有。如果语法无效,则不会运行整个语句。您需要将
try块放在eval()调用周围以捕获语法错误。
标签: javascript function asynchronous eval definition