【发布时间】:2020-03-20 17:03:49
【问题描述】:
我决定用一行代码搞清楚浏览器是如何处理脚本的,这一行是个例外。
假设我们有这个例外:
throw Error("custom error");
通过规范 ecma262 ThrowStatement 返回一个抛出类型的完成记录。 当脚本ScriptEvaluation被执行时:
- 如果 result.[[Type]] 是正常的,那么
- 将 result 设置为 scriptBody 的评估结果。
- 返回完成(结果)。
这让我们很清楚,从ScriptEvaluation返回了一个throw类型的完成记录
但是 ecma262 规范没有说明何时向控制台抛出错误。我需要帮助来了解 whatwg 规范如何拦截来自 ecma262 的错误抛出。
【问题讨论】:
-
我不认为这是标准化的,但是可以在这里找到评估脚本的步骤:html.spec.whatwg.org/multipage/webappapis.html#calling-scripts。
-
@FelixKling 感谢该链接。你能告诉我重新抛出错误是什么意思吗?
-
@MaximPro 那里的规范说“可选的 rethrow errors boolean:”。它是函数的布尔参数。
rethrow表示错误将作为错误进一步向上传递调用堆栈。 -
@loganfsmyth 因此对于我的行没有重新抛出参数。这个论点会出现在什么代码中?
-
"因此对于我的行没有 rethrow 参数" 对不起,我不知道那是什么意思。 “这个论点可以在什么代码中出现?”请花时间查看链接的规范。如果您点击使用该函数的链接,其中一个直接转到html.spec.whatwg.org/multipage/…,其中指出“运行经典脚本脚本,将重新抛出错误参数设置为 true”。所以答案是
importScripts()将错误抛出到调用它的任何代码中。这可能会在以后记录它,但也可能会捕获。
标签: html ecmascript-6