【javascript】javascript学习之js脚本的解析步骤
将javascript代码加入到HTML代码中,即使用<script>标签的方式有两种:直接嵌入页面中和使用外部js文件。
使用<script>标签嵌入html代码中时,需要指定其类型:type="text/javascript"。不过在html5标准中<script>标签的type默认为"text/javascript",可以省略不写,不过考虑到低版本的兼容问题,一般还是加上比较好。
嵌入式js代码:
添加到<script>标签内的内容会从上到下被解释。当解释器处理标签内的代码完毕前,页面的其他内容都不会被浏览器加载或显示,也就是说,在js代码处理执行完毕前,页面加载会被阻塞,直到js代码加载执行完毕。
引用外部js脚本:
在<script>标签中,可以使用"src"来引入外部javascript文件,当<script>标签用于引用外部js文件后,标签内的代码将被忽略。
和嵌入式js代码一样,当浏览器解析到<script>标签时,首先加载外部js文件代码,然后解释器会解释这些代码,在js文件代码被解释完前,浏览器页面加载会被阻塞,直到导入代码加载执行完毕。
按照惯例,<script>标签一般是写在<head>标签内,这种做法的目的是为了将所有的js文件和css文件的引用都放到一起。不过,由于外引用js代码的加载执行方式,写在<head>内的外部js文件在加载解释完毕前,整个页面是处于阻塞状态的。这样写在<body>内的DOM结构只有在head内的所有外部内容加载解释完毕后才开始加载,这样在用户看来就是空白的页面,而空白页面存在的时间越长,就会给人造成网页加载速度慢的印象。
要解决这个问题,可以把外部js文件的引入写到<body>中的DOM结构代码之后,这样页面在加载过程中,就会先加载DOM结构再开始加载解释js文件内容,这样空白页面的存在时间就会减少,也就变相的给人一种页面很快打开的感觉。
延迟脚本defer:
相应的,如果确实需要将外引用js文件的<script>标签写在<head>中,则可以使用<script>的defer属性。这个属性用途是表明脚本在执行时不会影响页面的构造。也就是说,脚本会被延迟到整个页面都解析完毕后再运行。所以,在<script>中设置defer属性,等于告诉浏览器,先下载,然后延迟执行。不过,defer属性只适用于引用外部js文件,在内嵌js中设置会被忽略。外部脚本会根据延迟的顺序顺序执行。
<script type="text/javascript" src="XXXXX" defer="defer"></script>
异步脚本async:
这个属性是HTML5的新属性,类似defer属性,都是改变外部脚本执行行为的属性。标签<script>设置了async后,外部脚本将异步执行,不过无法控制几个外部脚本的执行顺序,所以如果在脚本中有改变DOM的内容,将产生不可预期的错误。
<script type="text/javascript" src="XXXXX" async="async"></script>
如此一来,外部脚本的执行就会有三种方法:
如果 async="async":脚本相对于页面的其余部分异步地执行(当页面继续进行解析时,脚本将被执行);
如果不使用 async 且 defer="defer":脚本将在页面完成解析时执行;
如果既不使用 async 也不使用 defer:在浏览器继续解析页面之前,立即读取并执行脚本。
【javascript】javascript学习之js脚本的解析步骤的更多相关文章
- 不支持javascript的浏览器将JS脚本显示为页面内容
不支持javascript的浏览器将JS脚本显示为页面内容.为了防止这种情况发生,您可以使用这样的HTML注释标记:<html ><体><script type=“tex ...
- 学习 Node.js 的 6 个步骤
第一步 对于刚接触Node.js的新手来说,第一步无非是打好基础,你需要弄明白以下事情: JavaScript 的特性和语法.假如你对 JavaScript 还不熟悉的话,推荐书籍及链接: JavaS ...
- javascript中如何使用js脚本模拟"request"获取url后参数值呢?
转自:猫猫小屋--js获取url后参数信息 摘要: 下文讲述javascript中使用js代码获取url地址后面的参数值的方法分享,如下所示: 实现思路: 使用正则表达式对参数值进行匹配,获取参数后的 ...
- 百度统计的JS脚本原理解析
一句话:在你的网站上加载百度统计的脚本,这个脚本会收集你的本地信息,然后发送给百度统计网站 https://blog.csdn.net/iqzq123/article/details/8877645 ...
- JavaScript学习03 JS函数
JavaScript学习03 JS函数 函数就是包裹在花括号中的代码块,前面使用了关键词function: function functionName() { 这里是要执行的代码 } 函数参数 函数的 ...
- JavaScript 基础学习(二)js 和 html 的结合方式
第一种 使用一个标签 <script type="text/javascript"> js代码; </script> 第二种 使用 script 标签,引入 ...
- JavaScript学习12 JS中定义对象的几种方式
JavaScript学习12 JS中定义对象的几种方式 JavaScript中没有类的概念,只有对象. 在JavaScript中定义对象可以采用以下几种方式: 1.基于已有对象扩充其属性和方法 2.工 ...
- JavaScript学习10 JS数据类型、强制类型转换和对象属性
JavaScript学习10 JS数据类型.强制类型转换和对象属性 JavaScript数据类型 JavaScript中有五种原始数据类型:Undefined.Null.Boolean.Number以 ...
- JavaScript学习06 JS事件对象
JavaScript学习06 JS事件对象 事件对象:当事件发生时,浏览器自动建立该对象,并包含该事件的类型.鼠标坐标等. 事件对象的属性:格式:event.属性. 一些说明: event代表事件的状 ...
随机推荐
- ARM汇编中一些重要伪指令
IMPORT ,定义表示这是一个外部变量的标号,不是在本程序定义的 EXPORT ,表示本程序里面用到的变量提供给其他模块调用的. 以上两个在汇编和C语言混合编程的时候用到 ENDP 表示PRO ...
- DELPHI XE5-8 弹出列表框供选择
点击章节练习: var tmplm:Tlistboxitem; begin dm.FDQTMP.SQL.Clear; dm.FDQTMP.SQL.Add('select GSESSON from TS ...
- java策略模式(及与工厂模式的区别)
按一般教程中出现的例子理解: 简单工厂模式:客户端传一个条件进工厂类,工厂类根据条件创建相应的产品类对象,并return给客户端,供客户端使用.即客户端使用的是工厂类生产的产品对象. 策略模式:客户端 ...
- 关于webRTC
webRTC是浏览器实现的,用来实现p2p实时通讯的协议 现在已经被chrome和firefox支持 webRTC实现了三个API供前端开发者调用 MediaStream(或者叫getUserMedi ...
- scvmm2008 错误 2941 0x80072efe
该错误是由于vmm和主机之间的证书不匹配所导致的. 1. 运行mmc,文件=>添加管理单元=>添加证书=>计算机账户=>本地计算机. 2. 在下图各个目录证书下删除和vmm关联 ...
- 数独·唯一性技巧(Uniqueness)-2
Hidden Rectangle(隐藏矩形) 在由候选数(AB)组成.可能形成UR结构的4格中,有2-3格存在额外的候选数,此时若以不存在额外候选数的一格为起点,检查其对角格所在的行和列,若该行和列其 ...
- docker 进入容器
- 转载:quartz详解:quartz由浅入深
转载网址:http://blog.itpub.net/11627468/viewspace-1763498/ 一.quartz核心概念 先来看一张图: scheduler 任务调度器 ...
- Ubuntu16.04以root身份登入!
首先以非root用户身份登入系统. 1,修改root密码:启动shell,随后在shell里面输入命令: sudo passwd root 最后输入root要使用的密码,需要输入两次,这样root密码 ...
- Mysql内置功能《五》 函数
一 函数 MySQL中提供了许多内置函数,例如: 一.数学函数 ROUND(x,y) 返回参数x的四舍五入的有y位小数的值 RAND() 返回0到1内的随机值,可以通过提供一个参数(种子)使RAND( ...