实例详解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 相关文章推荐
对YUI扩展的Gird组件 Part-2
Mar 10 Javascript
JQuery实现点击div以外的位置隐藏该div窗口
Sep 13 Javascript
javascript作用域和闭包使用详解
Apr 25 Javascript
javascript中关于&amp;&amp; 和 || 表达式的小技巧分享
Apr 10 Javascript
flash+jQuery实现可关闭及重复播放的压顶广告
Apr 15 Javascript
JavaScript知识点总结(十六)之Javascript闭包(Closure)代码详解
May 31 Javascript
ztree实现左边动态生成树右边为内容详情功能
Nov 03 Javascript
JS实现的文件拖拽上传功能示例
May 21 Javascript
vue实现点击关注后及时更新列表功能
Jun 26 Javascript
JS与SQL方式随机生成高强度密码示例
Dec 29 Javascript
js判断浏览器的环境(pc端,移动端,还是微信浏览器)
Dec 24 Javascript
JS定时器如何实现提交成功提示功能
Jun 12 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
PHPMailer安装方法及简单实例
2008/11/25 PHP
php 利用socket发送HTTP请求(GET,POST)
2015/08/24 PHP
php实现的单一入口应用程序实例分析
2015/09/23 PHP
比较详细的关于javascript中void(0)的具体含义解释
2007/08/02 Javascript
通过javascript设置css属性的代码
2009/12/28 Javascript
JSON.stringify 语法实例讲解
2012/03/14 Javascript
教你如何自定义百度分享插件以及bshare分享插件的分享按钮
2014/06/20 Javascript
js使用正则实现ReplaceAll全部替换的方法
2014/07/18 Javascript
jQuery旋转木马式幻灯片轮播特效
2015/12/04 Javascript
javascript事件委托的用法及其好处简析
2016/04/04 Javascript
Three.js基础部分学习
2017/01/08 Javascript
Vue.js实现在下拉列表区域外点击即可关闭下拉列表的功能(自定义下拉列表)
2017/05/30 Javascript
vue  自定义组件实现通讯录功能
2018/09/30 Javascript
vue-router懒加载速度缓慢问题及解决方法
2018/11/25 Javascript
AngularJs中$cookies简单用法分析
2019/05/30 Javascript
jquery-ui 进度条功能示例【测试可用】
2019/07/25 jQuery
layui 地区三级联动 form select 渲染的实例
2019/09/27 Javascript
使用python批量化音乐文件格式转换的实例
2019/01/09 Python
python实现各种插值法(数值分析)
2019/07/30 Python
Django实现CAS+OAuth2的方法示例
2019/10/30 Python
Python字符串的15个基本操作(小结)
2021/02/03 Python
德国高端单身人士交友网站:ElitePartner
2018/12/02 全球购物
北美女性服装零售连锁店:maurices
2019/06/12 全球购物
是否有自动比较结构的方法
2015/06/03 面试题
QA工程师岗位职责
2013/11/20 职场文书
测绘工程专业个人自我评价
2013/12/01 职场文书
经典演讲稿范文
2013/12/30 职场文书
领导视察欢迎词
2014/01/15 职场文书
安全事故检讨书
2014/01/18 职场文书
先进事迹报告会感言
2014/01/24 职场文书
工艺员岗位职责
2014/02/11 职场文书
市场营销专业自荐书
2014/06/10 职场文书
群众路线领导对照材料
2014/08/23 职场文书
协会周年庆活动方案
2014/08/26 职场文书
如何用python反转图片,视频
2021/04/24 Python
MySQL系列之五 视图、存储函数、存储过程、触发器
2021/07/02 MySQL