实例详解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 HotKeys轻松搞定键盘事件代码
Aug 30 Javascript
fireworks菜单生成器mm_menu.js在 IE 7.0 显示问题的解决方法
Oct 20 Javascript
DOM2非标准但却支持很好的几个属性小结
Jan 21 Javascript
js遍历子节点子元素附属性及方法
Aug 19 Javascript
angularJS结合canvas画图例子
Feb 09 Javascript
jQuery插件EasyUI实现Layout框架页面中弹出窗体到最顶层效果(穿越iframe)
Aug 05 Javascript
基于VUE.JS的移动端框架Mint UI的使用
Oct 11 Javascript
vue生成token保存在客户端localStorage中的方法
Oct 25 Javascript
新手如何快速理解js异步编程
Jun 24 Javascript
vue实现文件上传读取及下载功能
Nov 17 Javascript
vue项目配置使用flow类型检查的步骤
Mar 18 Javascript
vue cli3适配所有端方案的实现
Apr 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中构造函数和析构函数解析
2014/10/10 PHP
laravel 字段格式化 modle 字段类型转换方法
2019/09/30 PHP
PHP数组对象与Json转换操作实例分析
2019/10/22 PHP
固定表格行列(expression)在IE下适用
2013/07/25 Javascript
ECMAScript6的新特性箭头函数(Arrow Function)详细介绍
2014/06/07 Javascript
node.js中的fs.appendFileSync方法使用说明
2014/12/17 Javascript
轻松创建nodejs服务器(5):事件处理程序
2014/12/18 NodeJs
Javascript中的几种URL编码方法比较
2015/01/23 Javascript
jQuery Ajax使用实例
2015/04/16 Javascript
avalonjs制作响应式瀑布流特效
2015/05/06 Javascript
javascript数组排序汇总
2015/07/07 Javascript
Js得到radiobuttonlist选中值的两种方法(推荐)
2016/08/25 Javascript
Vue.js组件使用开发实例教程
2016/11/01 Javascript
js导出excel文件的简洁方法(推荐)
2016/11/02 Javascript
原生javascript实现文件异步上传的实例讲解
2017/10/26 Javascript
JavaScript如何对图片进行黑白化
2018/04/10 Javascript
vue返回上一页面时回到原先滚动的位置的方法
2018/12/20 Javascript
jQuery中each和js中forEach的区别分析
2019/02/27 jQuery
JsonProperty 的使用方法详解
2019/10/11 Javascript
[43:24]VG vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
推荐10款最受Python开发者欢迎的Python IDE
2018/09/16 Python
linux环境下Django的安装配置详解
2019/07/22 Python
django2.2 和 PyMySQL版本兼容问题
2020/02/17 Python
浅析python 动态库m.so.1.0错误问题
2020/05/09 Python
python使用列表的最佳方案
2020/08/12 Python
Python爬虫进阶之爬取某视频并下载的实现
2020/12/08 Python
不同浏览器对CSS3和HTML5的支持状况
2009/10/31 HTML / CSS
美国体育用品商店:Rally House(NCAA、NFL、MLB、NBA、NHL和MLS)
2018/01/03 全球购物
Java中的基本数据类型所占存储空间大小固定的吗
2012/02/15 面试题
银行自荐信范文
2013/10/07 职场文书
个人求职信范文分享
2013/12/13 职场文书
领导党性分析材料
2014/02/15 职场文书
幼儿园保教工作总结2015
2015/10/15 职场文书
靠谱准确的求职信
2019/04/02 职场文书
CSS实现九宫格布局(自适应)的示例代码
2022/02/12 HTML / CSS
Python编程中内置的NotImplemented类型的用法
2022/03/23 Python