将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脚本的解析步骤的更多相关文章

  1. 不支持javascript的浏览器将JS脚本显示为页面内容

    不支持javascript的浏览器将JS脚本显示为页面内容.为了防止这种情况发生,您可以使用这样的HTML注释标记:<html ><体><script type=“tex ...

  2. 学习 Node.js 的 6 个步骤

    第一步 对于刚接触Node.js的新手来说,第一步无非是打好基础,你需要弄明白以下事情: JavaScript 的特性和语法.假如你对 JavaScript 还不熟悉的话,推荐书籍及链接: JavaS ...

  3. javascript中如何使用js脚本模拟"request"获取url后参数值呢?

    转自:猫猫小屋--js获取url后参数信息 摘要: 下文讲述javascript中使用js代码获取url地址后面的参数值的方法分享,如下所示: 实现思路: 使用正则表达式对参数值进行匹配,获取参数后的 ...

  4. 百度统计的JS脚本原理解析

    一句话:在你的网站上加载百度统计的脚本,这个脚本会收集你的本地信息,然后发送给百度统计网站 https://blog.csdn.net/iqzq123/article/details/8877645 ...

  5. JavaScript学习03 JS函数

    JavaScript学习03 JS函数 函数就是包裹在花括号中的代码块,前面使用了关键词function: function functionName() { 这里是要执行的代码 } 函数参数 函数的 ...

  6. JavaScript 基础学习(二)js 和 html 的结合方式

    第一种 使用一个标签 <script type="text/javascript"> js代码; </script> 第二种 使用 script 标签,引入 ...

  7. JavaScript学习12 JS中定义对象的几种方式

    JavaScript学习12 JS中定义对象的几种方式 JavaScript中没有类的概念,只有对象. 在JavaScript中定义对象可以采用以下几种方式: 1.基于已有对象扩充其属性和方法 2.工 ...

  8. JavaScript学习10 JS数据类型、强制类型转换和对象属性

    JavaScript学习10 JS数据类型.强制类型转换和对象属性 JavaScript数据类型 JavaScript中有五种原始数据类型:Undefined.Null.Boolean.Number以 ...

  9. JavaScript学习06 JS事件对象

    JavaScript学习06 JS事件对象 事件对象:当事件发生时,浏览器自动建立该对象,并包含该事件的类型.鼠标坐标等. 事件对象的属性:格式:event.属性. 一些说明: event代表事件的状 ...

随机推荐

  1. GCT感受

    GCT考试已经结束了,但是复习GCT的时候一直没来得及总结点什么,GCT考的比较基础,所以复习起来并不是特别费力,但是还是有一些东西值得我们去学习的. 对于GCT考试,一开始在报名的时候其实心里是挺抵 ...

  2. mongoexport遭遇Authentication failed

    今天使用mongoexport工具导出数据,遇到权限不足报错:[host]$mongoexport  -h 10.31.11.190:23820 -udbmgr -pMgr2mgdb -d rcmp ...

  3. Javascript基础编程の面向对象编程

    javascript是解释型的语言,在编译时和运行时之间没有明显区别,因此需要更动态的方法.javascript没有正式的类的概念,我们可以使用在运行时创建新的对象类型来替代,并且可以随时更改已有对象 ...

  4. 关于Java中的几种特殊类与接口,及特殊的创建实例的方法

    Java中有一些特殊的类,在教材中讲解的不深,但是确实非常有用的,这里总结一下,里面用到的有网上搜到的内容,这里表示下感谢. 一.成员内部类 成员内部类是在一个内中定义的另外一个类,这个类属于其上的类 ...

  5. ibatis 参数之 String

    <select id="query_cust_name" resultClass="_custForm" parameterClass="Str ...

  6. 基于JSP+Servlet开发手机销售购物商城系统(前台+后台)源码

    基于JSP+Servlet开发手机销售购物商城系统(前台+后台) 开发环境: Windows操作系统 开发工具:Eclipse/MyEclipse+Jdk+Tomcat+MySQL数据库 运行效果图: ...

  7. 获取vmware虚拟机模板

    在我们通过克隆虚机,需要用到虚机模板.在数据中心的目录下面有文件夹.模板和虚拟机,那么这里需要做的是根据类型做递归查询. private void GetTemplate() { System.Tex ...

  8. c++调用c#写的DLL

    c++调用c#写的DLL: 此文章演示了建立c#的dll: c++建立工程,引入dll: 不能解决的问题: 指定dll的路径,在代码里面直接写 #using "xxx.dll" 必 ...

  9. C#反射的基本应用

    反射描述了在运行过程中检查和处理程序元素的功能.反射可以完成以下任务: 枚举类型的成员: 实例化新对象: 执行对象的成员: 查找类型的信息: 查询程序集的信息: 检查应用于某种类型的自定义特性: 创建 ...

  10. LAYABOX 开发遇到的问题记录

    1.  如若在MAC下用LAYA开发H5游戏, 调试的时候会发现像素点过小(mac 5k屏),直接用下面按比例填充就好了 //保持原始高宽比的情况下,将舞台铺满屏幕,超出比例的部分会有黑边       ...