实例详解JavaScript中setTimeout函数的执行顺序


Posted in Javascript onJuly 12, 2017

前言

setTimeout,前端工程师必定会打交道的一个函数。它看上去非常的简单,朴实,有着一个很不平凡的名字--定时器。其实网上关于JavaScript中setTimeout的文章很多,但总感觉例子不够直接具体,因此写了个简单的例子并加以解释希望能让大家明白setTimeout是如何执行的。下面话不多说了,来一起看看详细的介绍:

实例代码如下:

var time1=new Date().getTime();
 console.log(1,time1);
 setTimeout(function(){
 var time4=new Date().getTime();
 console.log(4,time4);
 for(var a=0;a<10000000000;a++){
  a=a+1;
 }
 var time2=new Date().getTime();
 console.log(2,time2);
 },2000);

 setTimeout(function(){
 var time3=new Date().getTime();
 console.log(3,time3);
 },1000);
 setTimeout(function(){
 var time5=new Date().getTime();
 console.log(5,time5);
 },3000);
 setTimeout(function(){
 var time6=new Date().getTime();
 console.log(6,time6);
 },14000);

代码十分简单,想必大家都能看懂,执行结果如下:

实例详解JavaScript中setTimeout函数的执行顺序

解释:setTimeout属于异步执行函数,当程序执行完console.log(1,time1)后;遇到setTimeout会将该函数放入等待队列,等待当前主程序执行完毕后开始执行setTimeout,由于后面的几个都是setTimeout,因此都会放到等待队列~~~

那么这些队列里的函数谁先执行呢?就是根据setTimeout里的第二个参数(延迟时间)决定的,例如            

setTimeout(function(){
 var time3=new Date().getTime();
 console.log(3,time3);
 },1000);

那么主程序执行完成以后的1000ms后就会执行这段代码,如果延迟时间为2000,那么主程序执行完成后2000ms就会执行这段代码,只需记住一点:延迟时间始终是相对主程序执行完毕的那个时间算的 ,并且多个setTimeout的先后顺序也是由这个延迟时间决定的,如果遇到某个setTimeout需要花费大量的时间怎么办?可以参照上图里执行结果的数字2和数字5对应的时间,由于js是单线程,所以当执行到这个setTimeout后,会将这个程序执行完成后再去执行下一个setTimeout,无论下一个setTimeout的延迟时间为多少,如果这两个setTimeout时间的差值小于第一个setTimeout消耗的时间,程序会等待这个setTimeout执行完成后立即执行下一个setTimeout,如果差值大于消耗的时间,就按照和主程序约定的延迟(setTimeout里的第二个参数)执行即可

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
如何快速的呈现我们的网页的技巧整理
Jul 01 Javascript
将字符串转换成gb2312或者utf-8编码的参数(js版)
Apr 10 Javascript
js操纵跨frame的三级联动select下拉选项实例介绍
May 19 Javascript
jquery中键盘事件小结
Feb 24 Javascript
jQuery轮播图效果精简版完整示例
Sep 04 Javascript
自学实现angularjs依赖注入
Dec 20 Javascript
ionic开发中点击input时键盘自动弹出
Dec 23 Javascript
BootStrap Tooltip插件源码解析
Dec 27 Javascript
详谈js中标准for循环与foreach(for in)的区别
Nov 02 Javascript
详解vue-cli3使用
Aug 14 Javascript
详解Vue结合后台的列表增删改案例
Aug 21 Javascript
Vue页面刷新记住页面状态的实现
Dec 27 Javascript
详解Node项目部署到云服务器上
Jul 12 #Javascript
angular.js中解决跨域问题的三种方式
Jul 12 #Javascript
JavaScript+HTML5实现的日期比较功能示例
Jul 12 #Javascript
JavaScript实现设置默认日期范围为最近40天的方法分析
Jul 12 #Javascript
Bootstrap提示框效果的实例代码
Jul 12 #Javascript
JavaScript输出所选择起始与结束日期的方法
Jul 12 #Javascript
微信小程序三级联动地址选择器的实例代码
Jul 12 #Javascript
You might like
shopex中集成的站长统计功能的代码简单分析
2011/08/11 PHP
解析php中的escape函数
2013/06/29 PHP
有关于PHP中常见数据类型的汇总分享
2014/01/06 PHP
PHP使用两个栈实现队列功能的方法
2018/01/15 PHP
PHP基于面向对象封装的分页类示例
2019/03/15 PHP
jQuery autocomplete插件修改
2009/04/17 Javascript
Javascript select下拉框操作常用方法
2009/11/09 Javascript
Javascript实现的类似Google的Div拖动效果代码
2011/08/09 Javascript
Javascript中的delete介绍
2012/09/02 Javascript
textarea焦点的用法实现获取焦点清空失去焦点提示效果
2014/05/19 Javascript
gridview生成时如何去掉style属性中的border-collapse
2014/09/30 Javascript
浅谈JavaScript Math和Number对象
2015/01/26 Javascript
在JavaScript的AngularJS库中进行单元测试的方法
2015/06/23 Javascript
prototype.js常用函数详解
2016/06/18 Javascript
省市二级联动小案例讲解
2016/07/24 Javascript
使用JS实现图片展示瀑布流效果的实例代码
2016/09/12 Javascript
three.js快速入门【推荐】
2017/01/21 Javascript
zTree树形菜单交互选项卡效果的实现方法
2017/12/25 Javascript
vue项目base64字符串转图片的实现代码
2018/07/13 Javascript
javascript中undefined的本质解析
2019/07/31 Javascript
layui-table获得当前行的上/下一行数据的例子
2019/09/24 Javascript
python基于xml parse实现解析cdatasection数据
2014/09/30 Python
简单上手Python中装饰器的使用
2015/07/12 Python
python实现校园网自动登录的示例讲解
2018/04/22 Python
python opencv实现gif图片分解的示例代码
2019/12/13 Python
性能服装:HYLETE
2018/08/14 全球购物
香港草莓网:Strawberrynet香港
2019/05/10 全球购物
自考生毕业自我鉴定
2013/10/10 职场文书
医学毕业生自荐信
2013/10/11 职场文书
医学专业本科毕业生自我鉴定
2013/12/28 职场文书
学校食品安全实施方案
2014/06/14 职场文书
委托培训协议书
2014/11/17 职场文书
2016年“节能宣传周”活动总结
2016/04/05 职场文书
入党转正申请书范文
2019/05/20 职场文书
用Python selenium实现淘宝抢单机器人
2021/06/18 Python
电脑开机弹出documents文件夹怎么回事?弹出documents文件夹解决方法
2022/04/08 数码科技