当<script>元素没有async和defer属性时,JS脚本是如何执行的?

红皮书原文

无论如何包含代码,只要不存在defer和async属性,浏览器都会按照<script">元素在页面中出现的先后顺序对它们依次进行解析。换句话说,在第一个<script>元素包含的代码解析完成后,第二个<script>包含的代码才会被解析,然后才是第三个、第四个……

这里的解析是指运行,还是啥。
而且,不论是内嵌还是外部引用,都会进入阻塞执行的状态?换句话说,在解析出第一个<script>元素中的脚本内容时(不管它是内嵌还是外部js文件),在执行这些js代码时,浏览器无法再解析或执行其他的页面内容和JS代码?这是我的理解,不知是否正确。

其实这个问题涉及到一些术语的理解问题。
什么下载、加载、解析、运行、渲染,这些词在不同的资料中常常混用,所以经常让人不能理解。


幕布斯7119047
浏览 465回答 1
1回答

慕无忌1623718

1:script element2:浏览器在解析html时,自顶而下的往下一步步解析HTML并生产DOM,在解析过程中,遇到内敛js则暂停解析,等js解析引擎解析完成后再往下解析,遇到具有src属性的时候则一句1所描述的方式去处理。书中所描述的解析其实包括了执行的概念;js引擎其实可以粗略的分为解析器和执行器,解析器是对语法词法进行分解,构造出&nbsp;抽象语法树[AST],执行器则是根据AST来执行相对应的操作。(只是通俗易懂的这么解释,实际情况应该差不多)。什么下载、加载、解析、运行、渲染:下载:从远程服务器上获取编码字符,(比如:将a.js从源服务器上下载到本地)加载:将字符载入容器,(比如:将a.js载入到js引擎)解析:将输入的内容解析成想对容器可读的内容;(比如:a.js 被解析成了一个 AST)执行:将输入AST根据设定执行并产出输出结果。渲染:将输入的变成图像呈现在显示器中。实际的设计非常复杂,一般是浏览器开发人员比较关注这些内容。WebKitv8bebel涉及知识点包括(但不限于): http,tcp,数据结构,编译原理,操作系统。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript