浅谈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 相关文章推荐
js修改input的type属性及浏览器兼容问题探讨与解决
Jan 23 Javascript
jquery.cookie() 方法的使用(读取、写入、删除)
Dec 05 Javascript
jQuery+css实现的换页标签栏效果
Jan 27 Javascript
详解AngularJS过滤器的使用
Mar 11 Javascript
详细总结Javascript中的焦点管理
Sep 17 Javascript
微信小程序实现锚点定位楼层跳跃的实例
May 18 Javascript
JavaScript模块模式实例详解
Oct 25 Javascript
如何去除vue项目中的#及其ie9兼容性
Jan 11 Javascript
小程序清理本地缓存的方法
Aug 17 Javascript
微信小程序 如何获取网络状态
Jul 26 Javascript
layui table动态表头 改变表格头部 重新加载表格的方法
Sep 21 Javascript
关于JavaScript回调函数的深入理解
Jun 27 Javascript
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
地球防卫队:陪着奥特曼打小怪兽的人类力量 那些经典队服
2020/03/08 日漫
实现dedecms全站URL静态化改造的代码
2007/03/29 PHP
利用PHP+JS实现搜索自动提示(实例)
2013/06/09 PHP
PHP扩展模块memcached长连接使用方法分析
2014/12/24 PHP
PHP中trim()函数简单使用指南
2015/04/16 PHP
DB.ASP 用Javascript写ASP很灵活很好用很easy
2011/07/31 Javascript
jquery中交替点击事件的实现代码
2014/02/14 Javascript
jquery ajaxSubmit 异步提交的简单实现
2014/02/28 Javascript
nodejs教程之制作一个简单的文章发布系统
2014/11/21 NodeJs
jQuery循环动画与获取组件尺寸的方法
2015/02/02 Javascript
js调出上下文菜单的实例
2015/12/17 Javascript
详解JS中Array对象扩展与String对象扩展
2016/01/07 Javascript
jQuery的ready方法实现原理分析
2016/10/26 Javascript
TypeScript入门-基本数据类型
2017/03/28 Javascript
Angular 2 ngForm中的ngModel、[ngModel]和[(ngModel)]的写法
2017/06/29 Javascript
bootstrap时间控件daterangepicker使用方法及各种小bug修复
2017/10/25 Javascript
微信小程序实现美团菜单
2018/06/06 Javascript
Vue组件化开发之通用型弹出框的实现
2020/02/28 Javascript
vue.js this.$router.push获取不到params参数问题
2020/03/03 Javascript
深入解析Python中的WSGI接口
2015/05/11 Python
浅谈python 四种数值类型(int,long,float,complex)
2016/06/08 Python
Zookeeper接口kazoo实例解析
2018/01/22 Python
Python 实现一行输入多个值的方法
2018/04/21 Python
如何使用 Python 读取文件和照片的创建日期
2020/09/05 Python
如何将anaconda安装配置的mmdetection环境离线拷贝到另一台电脑
2020/10/15 Python
美国本地交易和折扣网站:LocalFlavor.com
2017/10/26 全球购物
viagogo意大利票务平台:演唱会、体育比赛、戏剧门票
2018/01/26 全球购物
Merchant 1948澳大利亚:新西兰领先的鞋类和靴子供应商
2018/03/24 全球购物
联想台湾官网:Lenovo TW
2018/05/09 全球购物
美国价格实惠的在线眼镜网站:Zeelool
2020/12/25 全球购物
智能电子应届生求职信
2013/11/10 职场文书
先进班级集体事迹材料
2014/01/30 职场文书
公司承诺书格式范文
2015/04/28 职场文书
郭明义观后感
2015/06/08 职场文书
致运动员加油稿
2015/07/21 职场文书
python unittest单元测试的步骤分析
2021/08/02 Python