浅谈js在html中的加载执行顺序,多个jquery ready执行顺序


Posted in Javascript onNovember 26, 2016

jQuery $(document).ready()执行顺序:

当页面DOM 元素全部加载完毕后就执行.ready()。$(document).ready()是DOM结构绘制完毕后就执行,不必等到加载完毕。

如果在.ready()执行之前有javascript代码存在,那么javascript将怎么执行呢?

答案是先执行.ready()之前的javascript代码,然后执行.ready()。

多个$(document).ready()的执行顺序并非单纯的顺序执行,其与嵌套层级也有一定的关系。

--------------------js加载执行顺序-----------------------

1.加载顺序:引入标记<script />的出现顺序,

页面上的Javascript代码是HTML文档的一部分,所以Javascript在页面装载时执行的顺序就是其引入标记<script />的出现顺序, <script />标记里面的或者通过src引入的外部JS,都是按照其语句出现的顺序执行,而且执行过程是文档装载的一部分。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> 
<title>无标题 3</title> 
<script>
  alert("1-最先执行"); 
</script> 
</head> 
<body onload="alert('3-最后执行');"> 
<script>
  alert("2-接着执行"); 
</script> 
</body> 
</html>

2、每个脚本定义的全局变量和函数,都可以被后面执行的脚本所调用。

变量的调用,必须是前面已经声明,否则获取的变量值是undefined。

<script type="text/javscrpt">//<![CDATA[
 alert(tmp); 
 //输出 undefined var 
 tmp = 1;
 alert(tmp); //输出 1//]]>
</script>

3.同一段脚本,函数定义可以出现在函数调用的后面,但是如果是分别在两段代码,且函数调用在第一段代码中,则会报函数未定义错误。

<script type="text/javscrpt">//<![CDATA[
 aa();      //浏览器报错//]]>
</script>
<script type="text/javscrpt">//<![CDATA[
 aa();  //输出 1 
 function aa()
 {
  alert(1);
 }//]]>
</script>

4.document.write()会把输出写入到脚本文档所在的位置,浏览器解析完documemt.write()所在文档内容后,继续解析document.write()输出的内容,
然后在继续解析HTML文档。

<script type="text/javascript">//<![CDATA[  
 document.write('<script type="text/javascript" src="test.js"><//script>');
 document.write('<script type="text/javascript">');  
 document.write('alert(2);')  
 document.write('alert("我是" + tmpStr);');  
 document.write('<//script>');  //]]>
</script> 

<script type="text/javascript">//<![CDATA[  
 alert(3);  //]]>
</script> test.js的内容是: 
var tmpStr = 1;  
alert(tmpStr);

在Firefox和Opera中的弹出值的顺序是:1、2、我是1、3

在IE中弹出值的顺序是:2、1、3,同时浏览器报错:tmpStr未定义

原因可能是IE在document.write时,并未等待加载SRC中的Javascript代码完毕后,才执行下一行,所以导致2先弹出,

并且执行到document.write('document.write("我是" + tmpStr)')调用tmpStr时,tmpStr并未定义,从而报错。

解决这个问题,可以利用HTML解析是解析完一个HTML标签,再执行下一个的原理,把代码拆分来实现:

<script type="text/javascript">//<![CDATA[
  document.write('<script type="text/javascript" src="test.js"><//script>');
    //]]>
</script>
<script type="text/javascript">//<![CDATA[  
  document.write('<script type="text/javascript">');  
  document.write('alert(2);')
  document.write('alert("我是" + tmpStr);');  
  document.write('<//script>');  
  //]]>
</script> 
 
 <script type="text/javascript">//<![CDATA[  
  alert(3);  
  //]]>
</script>

这样IE下和其他浏览器输出值的顺序都是一直的了:1、2、我是1、3

总结:IE下,用Document.Write方法引用js文件时,js文件会出现尚未加载就直接调用的情况,因此建议将引用的JS文件单独放在一个script块中。以确保引用的js文件完全加载后,再继续执行后面的Document.Write内容
 
5、同名JS函数执行顺序

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html>
<head>
<script type="text/javascript">

  function aa() {
    alert('First aa')
  }  
</script>  
  <title></title>
</head>
<body>
  <form id="form1" runat="server">

<br />
<input id="Button1" type="button" value="button" onclick="aa();"/>
  </form>
</body>
<script type="text/javascript">
  function aa(s) {
    alert('Second aa');
  }
  function aa(s) {
    alert('Last aa');
  }
</script>
</html>

点击“botton”执行结果: Last aa

在js里出现同名函数后,你在web页面里调用改js函数后,总是调用页面中最后一个加载的函数。

以上这篇浅谈js在html中的加载执行顺序,多个jquery ready执行顺序就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript拓展DOM操作 prependChild insertAfert
Nov 17 Javascript
给jQuery方法添加回调函数一款插件的应用
Jan 21 Javascript
jquery live()重复绑定的解决方法介绍
Jan 03 Javascript
jQuery+ajax实现鼠标单击修改内容的思路
Jun 29 Javascript
jQuery的text()方法用法分析
Dec 20 Javascript
新手快速学习JavaScript免费教程资源汇总
Jun 25 Javascript
jQuery Easyui使用(一)之可折叠面板的布局手风琴菜单
Aug 17 Javascript
Node.js 实现简单小说爬虫实例
Nov 18 Javascript
获取url中用&amp;隔开的参数实例(分享)
May 28 Javascript
详解angularJS自定义指令间的相互交互
Jul 05 Javascript
通过实例了解js函数中参数的传递
Jun 15 Javascript
vue实现下载文件流完整前后端代码
Nov 17 Vue.js
JS匿名函数实例分析
Nov 26 #Javascript
利用Js的console对象,在控制台打印调式信息测试Js的实现
Nov 26 #Javascript
JS类的定义与使用方法深入探索
Nov 26 #Javascript
js控制台输出的方法(详解)
Nov 26 #Javascript
jQuery基于排序功能实现上移、下移的方法
Nov 26 #Javascript
node.js中的事件处理机制详解
Nov 26 #Javascript
使用node.js中的Buffer类处理二进制数据的方法
Nov 26 #Javascript
You might like
PHP 判断变量类型实现代码
2009/10/23 PHP
php加水印的代码(支持半透明透明打水印,支持png透明背景)
2013/01/17 PHP
详解PHP匿名函数与注意事项
2016/03/29 PHP
PHP实现的同步推荐操作API接口案例分析
2016/11/30 PHP
PHP反射基础知识回顾
2020/09/10 PHP
suggestion开发小结以及对键盘事件的总结(针对中文输入法状态)
2011/12/20 Javascript
javascript 基础篇1 什么是js 建立第一个js程序
2012/03/14 Javascript
JavaScript字符串对象split方法入门实例(用于把字符串分割成数组)
2014/10/16 Javascript
JavaScript检测鼠标移动方向的方法
2015/05/22 Javascript
JavaScript实现简单Tip提示框效果
2016/04/20 Javascript
JavaScript判断数字是否为质数的方法汇总
2016/06/02 Javascript
Angular的Bootstrap(引导)和Compiler(编译)机制
2016/06/20 Javascript
用node和express连接mysql实现登录注册的实现代码
2017/07/05 Javascript
js实现本地图片文件拖拽效果
2017/07/18 Javascript
ng-zorro-antd 入门初体验
2018/12/03 Javascript
js实现继承的方法及优缺点总结
2019/05/08 Javascript
写给新手同学的vuex快速上手指北小结
2020/04/14 Javascript
微信小程序学习之自定义滚动弹窗
2020/12/20 Javascript
Python中的字典遍历备忘
2015/01/17 Python
Numpy中的mask的使用
2018/07/21 Python
python实现图片转字符小工具
2019/04/30 Python
详解python路径拼接os.path.join()函数的用法
2019/10/09 Python
基于注解实现 SpringBoot 接口防刷的方法
2021/03/02 Python
李维斯牛仔裤荷兰官方网站:Levi’s NL
2020/08/23 全球购物
优秀学生自我鉴定范例
2013/12/18 职场文书
大学同学十年聚会感言
2014/02/21 职场文书
党的群众路线教育实践活动公开承诺书
2014/03/28 职场文书
大学中国梦演讲稿
2014/04/23 职场文书
5s推行计划书
2014/05/06 职场文书
英语专业求职信
2014/07/08 职场文书
公司离职证明范本(5篇)
2014/09/17 职场文书
科级干部群众路线教育实践活动对照检查材料思想汇报
2014/09/20 职场文书
教师个人自我剖析材料
2014/09/29 职场文书
见习报告格式要求
2014/11/04 职场文书
入党积极分子考察意见
2015/06/02 职场文书
确保减税降费落地生根,用实实在在措施
2019/07/19 职场文书