为何SyntaxError会阻止前一行执行,而TypeError却不会?
为什么SyntaxError会影响第一行执行,TypeError却不会?
这得从JavaScript引擎的执行流程说起,它分两大核心阶段:解析编译阶段和执行阶段,两类错误的触发时机完全不同:
SyntaxError(语法错误):这类错误是在解析编译阶段就被引擎揪出来的。JS引擎在执行代码前,会先通读整段代码,检查语法是否符合规范。像第二段代码里的
console..log('bye'),连续两个点属于语法违规,引擎在解析时直接就发现了问题,根本不会进入后续的执行阶段。这时候第一行代码连执行的机会都没有,自然不会打印出'hello'。TypeError(类型错误):这类错误是在执行阶段才会爆发的。第一段代码的语法完全合规,引擎顺利通过了解析阶段,进入执行环节。它会按顺序执行代码,先跑完第一行
console.log('hello'),打印出内容后,才执行第二行console.og('bye')。这时候发现console对象没有og这个方法,才抛出TypeError,但第一行已经执行完了,所以'hello'已经被打印出来了。
说白了就是:语法错误直接掐断了代码执行的可能性,而类型错误是执行到出错代码时才触发,前面的代码已经跑完了。
内容的提问来源于stack exchange,提问作者Kuldeep Panwar
相关产品推荐
相关产品推荐

