[js] 代码中如果遇到未定义的变量,会抛出异常吗?程序还会不会继续往下走?

在浏览器环境下

JS 解析器解析到未定义变量时,会抛出 Uncaught ReferenceError 错误,JS 引擎会停止解析后面的代码,但之前的代码不受影响,并跳出该代码块。

下面看看具体代码。

<!DOCTYPE html>
<html lang="en">
  <head>
    <title>
代码中如果遇到未定义的变量,会抛出异常吗?程序还会不会继续往下走
    </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。

个人简介

我是歌谣,欢迎和大家一起交流前后端知识。放弃很容易,
但坚持一定很酷。欢迎大家一起讨论

主目录

与歌谣一起通关前端面试题