实例详解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 相关文章推荐
javascript写的简单的计算器,内容很多,方法实用,推荐
Dec 29 Javascript
JavaScript等比例缩放图片控制超出范围的图片
Aug 06 Javascript
快速解决jQuery与其他库冲突的方法介绍
Jan 02 Javascript
AspNet中使用JQuery boxy插件的确认框
May 20 Javascript
微信开发 js实现tabs选项卡效果
Oct 28 Javascript
JS 实现Base64编码与解码实例详解
Nov 07 Javascript
bootstrap快速制作后台界面
Dec 05 Javascript
Mac系统下Webstorm快捷键整理大全
May 28 Javascript
bootstrap下拉框动态赋值方法
Aug 10 Javascript
Vue中跨域及打包部署到nginx跨域设置方法
Aug 26 Javascript
解决vue的router组件component在import时不能使用变量问题
Jul 26 Javascript
JavaScript读取本地文件常用方法流程解析
Oct 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
php 缓存函数代码
2008/08/27 PHP
支持中文、字母、数字的PHP验证码
2015/05/04 PHP
smarty简单应用实例
2015/11/03 PHP
PHP数据库操作四:mongodb用法分析
2017/08/16 PHP
Jquery中增加参数与Json转换代码
2009/11/20 Javascript
js屏蔽鼠标键盘(右键/Ctrl+N/Shift+F10/F11/F5刷新/退格键)
2013/01/24 Javascript
js有序数组的连接问题
2013/10/01 Javascript
jquery validate在ie8下的bug解决方法
2013/11/13 Javascript
jquery导航制件jquery鼠标经过变色效果示例
2013/12/05 Javascript
教你用AngularJS框架一行JS代码实现控件验证效果
2014/06/23 Javascript
js 动态修改css文件用到了cssRule
2014/08/20 Javascript
jQuery选择器源码解读(二):select方法
2015/03/31 Javascript
浅析AngularJS中的生命周期和延迟处理
2015/06/18 Javascript
jquery实现从数组移除指定的值
2015/06/24 Javascript
JS实现1000以内被3或5整除的数字之和
2016/02/18 Javascript
微信小程序 Storage API实例详解
2016/10/02 Javascript
详解nodejs 文本操作模块-fs模块(四)
2016/12/22 NodeJs
Bootstrap实现提示框和弹出框效果
2017/01/11 Javascript
JavaScript学习总结之正则的元字符和一些简单的应用
2017/06/30 Javascript
Three.js利用顶点绘制立方体的方法详解
2017/09/27 Javascript
vue-router判断页面未登录自动跳转到登录页的方法示例
2018/11/04 Javascript
webpack项目使用eslint建立代码规范实现
2019/05/16 Javascript
vue项目页面嵌入代码块vue-prism-editor的实现
2020/10/30 Javascript
nuxt 页面路由配置,主页轮播组件开发操作
2020/11/05 Javascript
解决在pycharm中显示额外的 figure 窗口问题
2019/01/15 Python
Python3环境安装Scrapy爬虫框架过程及常见错误
2019/07/12 Python
Python Tkinter模块 GUI 可视化实例
2019/11/20 Python
通过案例解析python鸭子类型相关原理
2020/10/10 Python
HTML5 embed标签定义和用法详解
2014/05/09 HTML / CSS
Net-A-Porter美国官网:全球时尚奢侈品名站
2017/02/11 全球购物
char型变量中能不能存贮一个中文汉字
2015/07/08 面试题
理工学院学生自我鉴定
2014/02/23 职场文书
2015年学校办公室主任工作总结
2015/07/20 职场文书
2015年公司中秋节致辞
2015/07/31 职场文书
Go获取两个时区的时间差
2022/04/20 Golang
Golang入门之计时器
2022/05/04 Golang