一个网页中有多个<script>标签时的问题?

一个网页文件中有多个<script>标签时,每个<script>代码执行后的结果依然保存到内存中么?还是会立即释放并关闭开始执行下一个<script>中的代码?

阅读 401
评论 2019-05-17 提问
    2 个回答
    Ayden
    • 63

    举个例子就知道了。

    <script>
      var a = 1
    </script>
    <script>
      console.log(a) // 1
    </script>

    这说明<script>标签中的代码执行后并没有释放关闭。
    我又试了试:

    <script>
      console.log(a) // 报错 Uncaught ReferenceError: a is not defined
    </script>
    <script>
      var a = 1
    </script>

    这说明两个<script>标签中的代码并不存在变量提升,这是为什么呢?

    我又试了试这个:

    <script>
      console.log(a) // Uncaught ReferenceError: a is not defined
      var b = 1
      console.log(b)
    </script>
    <script>
      var a = 1
      console.log(a); // 1
    </script>

    后面标签中的代码会执行,打印 1.

    我个人的理解:

    1. 这和浏览器中 UI 线程、JS 解析线程有关
    2. <script>标签是浏览器中的 UI 线程负责解析的,并且一个<script>标签就是一个代码块儿,而<script>中的代码是 JS 解析线程负责解析的
    3. 这两个<script>中的代码他们拥有同一个全局作用域,但是因为它们是分开渲染与解析的:

    所以:也就是说,每个<script>标签先由 UI 线程渲染,再由 JS 线程解析,JS 代码分次被解析,但是他们拥有同一个全局作用域。

    评论 赞赏 2019-05-17