实例详解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 相关文章推荐
JQuery Tips(4) 一些关于提高JQuery性能的Tips
Dec 19 Javascript
为radio类型的INPUT添加客户端脚本(附加实现JS来禁用onClick事件思路代码)
Nov 11 Javascript
JS 获取浏览器和屏幕宽高等信息的实现思路及代码
Jul 31 Javascript
JS实现的论坛Ajax打分效果完整实例
Oct 31 Javascript
基于jquery实现轮播特效
Apr 22 Javascript
JS中判断null的方法分析
Nov 21 Javascript
使用vue实现点击按钮滑出面板的实现代码
Jan 10 Javascript
详解vue2.0组件通信各种情况总结与实例分析
Mar 22 Javascript
vue-cli 如何打包上线的方法示例
May 08 Javascript
微信小程序实现获取准确的腾讯定位地址功能示例
Mar 27 Javascript
微信小程序文章详情页跳转案例详解
Jul 09 Javascript
开发一个封装iframe的vue组件
Mar 29 Vue.js
详解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
又一个php 分页类实现代码
2009/12/03 PHP
php切割页面div内容的实现代码分享
2012/07/31 PHP
php从数据库查询结果生成树形列表的方法
2015/04/17 PHP
PHP实现恶意DDOS攻击避免带宽占用问题方法
2015/05/27 PHP
PHP通过文件保存和更新信息的方法分析
2019/09/12 PHP
prototype 1.5 &amp; scriptaculous 1.6.1 学习笔记
2006/09/07 Javascript
关于javascript中的parseInt使用技巧
2009/09/03 Javascript
在网站上应该用的30个jQuery插件整理
2011/11/03 Javascript
网页加载时页面显示进度条加载完成之后显示网页内容
2012/12/23 Javascript
js时间戳转为日期格式的方法
2015/12/28 Javascript
jquery div模态窗口的简单实例
2016/05/28 Javascript
BootStrap 智能表单实战系列(五) 表单依赖插件处理
2016/06/13 Javascript
使用jQuery.Qrcode插件在客户端动态生成二维码并添加自定义Logo
2016/09/01 Javascript
JavaScript 拖拽实例代码
2016/09/21 Javascript
详解Js模板引擎(TrimPath)
2016/11/22 Javascript
JavaScript版经典游戏之扫雷游戏完整示例【附demo源码下载】
2016/12/12 Javascript
JavaScript实现反转字符串的方法详解
2017/04/27 Javascript
MUI实现上拉加载和下拉刷新效果
2017/06/30 Javascript
jquery一键控制checkbox全选、反选或全不选
2017/10/16 jQuery
vue中手机号,邮箱正则验证以及60s发送验证码的实例
2018/03/16 Javascript
微信小程序实现发红包功能
2018/07/11 Javascript
JS异步处理的进化史深入讲解
2019/08/25 Javascript
vue实现标签云效果的示例
2020/11/09 Javascript
[42:39]老党炸弹人试玩视频
2014/09/03 DOTA
python3+PyQt5实现柱状图
2018/04/24 Python
Python计算开方、立方、圆周率,精确到小数点后任意位的方法
2018/07/17 Python
Python通用循环的构造方法实例分析
2018/12/19 Python
Python时间序列处理之ARIMA模型的使用讲解
2019/04/02 Python
python使用协程实现并发操作的方法详解
2019/12/27 Python
python读取图片的几种方式及图像宽和高的存储顺序
2020/02/11 Python
python中round函数如何使用
2020/06/19 Python
SEPHORA新西兰官方网站:购买化妆品和护肤品
2016/12/02 全球购物
AVI-8手表美国官方商店:AVI-8 USA
2019/04/10 全球购物
奥巴马胜选演讲稿
2014/05/15 职场文书
实习证明格式范文
2014/10/14 职场文书
2016简单的租房合同范本
2016/03/18 职场文书