0

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

hackerws 1.4k
5月17日提问

查看全部 2 个回答

1

已采纳

举个例子就知道了。

<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 代码分次被解析,但是他们拥有同一个全局作用域。

推广链接