实例详解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实现的鼠标滑过按钮改变背景图片
Jul 15 Javascript
使用js检测浏览器的实现代码
May 14 Javascript
解析使用JS 清空File控件的路径值
Jul 08 Javascript
JS Loading功能的简单实现
Nov 29 Javascript
jQuery实现文件上传进度条特效
Aug 12 Javascript
谈一谈javascript中继承的多种方式
Feb 19 Javascript
javascript高级选择器querySelector和querySelectorAll全面解析
Apr 07 Javascript
Bootstrap table使用方法详细介绍
Dec 09 Javascript
如何在AngularJs中调用第三方插件库
May 21 Javascript
jquery.validate.js 多个相同name的处理方式
Jul 10 jQuery
详解vue项目中如何引入全局sass/less变量、function、mixin
Jun 02 Javascript
vue自定义右键菜单之全局实现
Apr 09 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
微信扫描二维码登录网站代码示例
2013/12/30 PHP
使用Apache的rewrite
2021/03/09 Servers
使用prototype.js 的时候应该特别注意的几个问题.
2007/04/12 Javascript
js中自定义方法实现停留几秒sleep
2014/07/11 Javascript
解决js页面滚动效果scrollTop在FireFox与Chrome浏览器间的兼容问题的方法
2015/12/03 Javascript
jQuery EasyUI之DataGrid使用实例详解
2016/01/04 Javascript
JavaScript实现99乘法表及隔行变色实例代码
2016/02/24 Javascript
jQuery实现点击行选中或取消CheckBox的方法
2016/08/01 Javascript
js模式化窗口问题![window.dialogArguments]
2016/10/30 Javascript
解析JavaScript模仿块级作用域
2016/12/29 Javascript
jQuery validate 验证radio实例
2017/03/01 Javascript
微信小程序 es6-promise.js封装请求与处理异步进程
2017/06/12 Javascript
理解 Node.js 事件驱动机制的原理
2017/08/16 Javascript
JavaScript数据类型的存储方法详解
2017/08/25 Javascript
玩转Koa之核心原理分析
2018/12/29 Javascript
layui2.0使用table+laypage实现真分页
2019/07/27 Javascript
5分钟快速看懂ES6中的反射与代理
2019/12/19 Javascript
autojs 蚂蚁森林能量自动拾取即给指定好友浇水的实现方法
2020/05/03 Javascript
Python中urllib2模块的8个使用细节分享
2015/01/01 Python
总结网络IO模型与select模型的Python实例讲解
2016/06/27 Python
python安装教程
2018/02/28 Python
对python调用RPC接口的实例详解
2019/01/03 Python
python如何导入依赖包
2020/07/13 Python
Django Model层F,Q对象和聚合函数原理解析
2020/11/12 Python
PUMA官方商城:世界领先的运动品牌之一
2016/11/16 全球购物
家庭睡衣和家庭用品:Little Blue House
2018/03/18 全球购物
英国地毯卖家:The Rug Seller
2019/07/18 全球购物
英国在线玫瑰专家:InterRose
2019/12/01 全球购物
您熟悉ORM(Object-Relation Mapping)吗?请谈谈您所理解的ORM
2016/02/08 面试题
本科毕业生的求职信范文
2013/11/20 职场文书
高中语文教学反思
2014/01/16 职场文书
我的动漫时代的创业计划书范文
2014/01/27 职场文书
人事专员的岗位职责
2014/03/01 职场文书
建筑工地标语
2014/06/18 职场文书
高中校园广播稿3篇
2014/09/29 职场文书
goland设置颜色和字体的操作
2021/05/05 Golang