JavaScript Try Catch异常处理失效:为何SyntaxError未被捕获?
为什么SyntaxError没被catch块捕获?
这是JavaScript的执行机制导致的,和代码的语法错误类型直接相关:
JavaScript代码的执行分为解析编译阶段和执行阶段:
- 解析阶段会先扫描整个代码,检查语法是否合法。你的代码里
console.log(Hello World);没有给Hello World加引号,属于明显的语法错误,这个错误在解析阶段就被JavaScript引擎发现了,根本不会进入后续的执行阶段。 try/catch的作用是捕获执行阶段中产生的运行时错误,对于解析阶段就暴露的语法错误,它完全没机会处理。
- 解析阶段会先扫描整个代码,检查语法是否合法。你的代码里
修正后的代码示例:
try { console.log('Hello World'); // 给字符串加上引号,修复语法错误 } catch (error) { console.log(error.name); console.log(error.message); }
此时代码语法合法,进入执行阶段后,如果try块内出现运行时错误(比如调用未定义的函数),catch块才会正常捕获并处理。
简单来说:语法错误是"未执行先报错",try/catch管的是"执行中报错",所以前者不会被后者捕获。
内容的提问来源于stack exchange,提问作者Avijit
相关产品推荐
相关产品推荐

