在浏览器环境下
JS 解析器解析到未定义变量时,会抛出 Uncaught ReferenceError 错误,JS 引擎会停止解析后面的代码,但之前的代码不受影响,并跳出该代码块。
下面看看具体代码。
<!DOCTYPE html><html lang="en"> <head> <title> 第413天 代码中如果遇到未定义的变量,会抛出异常吗?程序还会不会继续往下走 </title> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1" /> </head> <body> <script> console.log(1); </script> <script> console.log(2); console.log(a); console.log(3); </script> <script> console.log(4); </script> </body></html>
- JS 引擎首先加载第一个
<script></script>
代码块,进入解析的三个流程(1、词法语法分析,2、预解析,3、执行阶段),之后在控制台输出 1; - 接着 JS 引擎加载第二个
<script></script>
代码块,进入解析的三个流程,控制台输出 2,当解析console.log(a);
这行代码时,因为 a 是未定义的变量,会抛出 Uncaught ReferenceError 错误,JS 引擎会停止解析后面的代码,即 JS 引擎不会执行console.log(3);
这行代码,并跳出第二个<script></script>
代码块; - 立马加载第三个
<script></script>
代码块,进入解析的三个流程,在控制台输出 4。



