为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕容森 2019-04-20 14:19:46
一个网页文件中有多个<script>标签时,每个<script>代码执行后的结果依然保存到内存中么?还是会立即释放并关闭开始执行下一个<script>中的代码?
查看完整描述

2 回答

?
幕布斯7119047

TA贡献1794条经验 获得超8个赞


举个例子就知道了。


<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-19
?
噜噜哒

TA贡献1784条经验 获得超7个赞

个人可以理解把每个script标签里的代码嵌在对应的位置,执行结果是否保存在内存中,取决于结果的作用域和结果是否被引用


查看完整回答
反对 回复 2019-05-19
  • 2 回答
  • 0 关注
  • 1431 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信