实例详解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 相关文章推荐
Juqery Html(),append()等方法的Bug解决方法
Dec 13 Javascript
jQuery事件 delegate()使用方法介绍
Oct 30 Javascript
window.setInterval()方法的定义和用法及offsetLeft与style.left的区别
Nov 11 Javascript
Bootstrap轮播加上css3动画,炫酷到底!
Dec 22 Javascript
js 文字超出长度用省略号代替,鼠标悬停并以悬浮框显示实例
Dec 06 Javascript
JavaScript正则替换HTML标签功能示例
Mar 02 Javascript
一篇看懂vuejs的状态管理神器 vuex状态管理模式
Apr 20 Javascript
JS中call和apply函数用法实例分析
Jun 20 Javascript
vue 中的keep-alive实例代码
Jul 20 Javascript
JavaScript中this用法学习笔记
Mar 17 Javascript
vue实现菜单切换功能
May 08 Javascript
详解Vue+elementUI build打包部署后字体图标丢失问题
Jul 13 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 中检查或过滤IP地址的实现代码
2011/11/27 PHP
CodeIgniter控制器之业务逻辑实例分析
2016/01/20 PHP
学习thinkphp5.0验证类使用方法
2017/11/16 PHP
安装docker和docker-compose实例详解
2019/07/30 PHP
用户注册常用javascript代码
2009/08/29 Javascript
JavaScript 直接操作本地文件的实现代码
2009/12/01 Javascript
JQuery live函数
2010/12/24 Javascript
JS获取iframe中marginHeight和marginWidth属性的方法
2015/04/01 Javascript
删除javascript所创建子节点的方法
2015/05/21 Javascript
深入理解jquery跨域请求方法
2016/05/18 Javascript
jQuery中选择器的基础使用教程
2016/05/23 Javascript
JavaScript简单获取页面图片原始尺寸的方法
2016/06/21 Javascript
浅谈jQuery中hide和fadeOut的区别 show和fadeIn的区别
2016/08/18 Javascript
JS实现基于拖拽改变物体大小的方法
2018/01/23 Javascript
Vue.js 使用v-cloak后仍显示变量的解决方法
2018/11/19 Javascript
layui禁用侧边导航栏点击事件的解决方法
2019/09/25 Javascript
vue h5移动端禁止缩放代码
2019/10/28 Javascript
python简单判断序列是否为空的方法
2015/06/30 Python
Python科学计算之NumPy入门教程
2017/01/15 Python
浅谈Django中的数据库模型类-models.py(一对一的关系)
2018/05/30 Python
pycharm中成功运行图片的配置教程
2018/10/28 Python
Python制作词云图代码实例
2019/09/09 Python
python使用pip安装模块出现ReadTimeoutError: HTTPSConnectionPool的解决方法
2019/10/04 Python
在Python中等距取出一个数组其中n个数的实现方式
2019/11/27 Python
python 检查数据中是否有缺失值,删除缺失值的方式
2019/12/02 Python
Tensorflow中tf.ConfigProto()的用法详解
2020/02/06 Python
HTML5 Geolocation API的正确使用方法
2018/12/04 HTML / CSS
给分销商的致歉信
2014/01/14 职场文书
工业自动化专业自荐信范文
2014/04/10 职场文书
无犯罪记录证明范本
2014/09/15 职场文书
关于运动会广播稿50字
2014/10/18 职场文书
2014年流动人口工作总结
2014/11/26 职场文书
2015世界地球日活动总结
2015/02/09 职场文书
好好学习保证书
2015/02/26 职场文书
《亲亲我的妈妈》观后感(3篇)
2019/09/26 职场文书
盘点2020年适合农村地区创业的项目
2019/10/16 职场文书