Javascript中是否存在无法捕获的异常?

Mag*_*elt 12 javascript exception-handling exception

任何javascript运行时(浏览器,节点等)是否会抛出无法捕获的异常?在javascript环境中遇到的任何和所有异常都可以在try/catch语句中捕获吗?

Dag*_*bit 18

如果异常是指任何破坏脚本的异常情况,那么所有异常都会抛出无法捕获的异常,因为大多数语法错误都无法捕获.只能捕获动态评估代码(eval,new Function)中的语法错误.

try { :( } catch(e) { } // uncatchable syntax error
Run Code Online (Sandbox Code Playgroud)

这是假设你的意思是捕获使用try..catch.从技术上讲,您可以使用该error事件来捕获来自其他脚本块的语法错误:

<script> onerror = function (e) { return true; }; </script>
<script> :( </script>
Run Code Online (Sandbox Code Playgroud)

另一方面,也许您不认为在评估之前发生的错误是异常.在这种情况下,"无法捕获的异常"可能会降级为来自其他执行上下文的异常抛出(例如使用setTimeout调用的函数),其中您无法控制抛出异常的执行上下文.当然,这些例外不会破坏程序的流程.

  • 好答案.我只想指出,在ECMAScript 5规范中,无法捕获的错误类别被称为"[早期错误](http://www.ecma-international.org/ecma-262/5.1/#sec-16)".早期错误是语法错误的超集(因为它们还包括一些与语法无关的非法声明). (11认同)