我决定弄清楚浏览器如何处理代码中只有一行的脚本,这是一个例外。
让我们说这个例外:
throw Error("custom error");
根据规范ecma262 ThrowStatement返回具有抛出类型的完成记录。 执行脚本ScriptEvaluation时:
- 如果结果。[[Type]]正常,则
- 将结果设置为评估scriptBody的结果。
- 返回完成(结果)。
这使我们很清楚,ScriptEvaluation返回了具有抛出类型的完成记录
但是ecma262规范没有说明何时向控制台抛出错误。我需要帮助,以了解whatwg规范如何拦截ecma262引发的错误。
答案 0 :(得分:1)
您看到的行为在WHATWG HTML标准(强调我的)中指定。
https://html.spec.whatwg.org/multipage/webappapis.html#calling-scripts
否则,将valuationStatus设置为ScriptEvaluation(脚本的记录)。 如果ScriptEvaluation由于用户代理终止了正在运行的脚本而没有完成,则将EvaluationStatus保留为空。
如果评价状态是一个突然完成,则:
...
...
否则,重新抛出错误为false。执行以下步骤:
报告评估状态给出的异常。脚本的[[Value]]。
使用设置运行脚本后进行清理。
返回评估状态。
https://html.spec.whatwg.org/multipage/webappapis.html#runtime-script-errors-in-documents
当用户代理要报告异常E时,用户代理必须使用以下命令指定的全局对象报告相关脚本的错误,并在包含该脚本的资源中列出有问题的位置(行号和列号)脚本的设置对象作为目标。如果此后仍未处理该错误,则该错误可能会报告给开发者控制台。
此外,ECMAScript实际上没有在https://console.spec.whatwg.org中指定的控制台