实例详解JavaScript中setTimeout函数的执行顺序
本文通过具体代码实例深入解析JavaScript中setTimeout函数的执行原理。重点阐述异步任务如何进入等待队列,以及延迟时间相对于主程序执行完毕时间的计算方式。结合单线程特性,说明当回调函数执行耗时较长时,后续定时器的触发逻辑与时间差判定规则,帮助开发者准确掌握定时器执行顺序。
前言与概述
前言
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);
代码逻辑较为直观,运行后的输出结果如下所示:

异步执行机制解析
解析:setTimeout作为异步函数,在程序执行完console.log(1,time1)后,若遇到setTimeout调用,会将该回调函数放入等待队列。只有当主程序执行完毕后,才会开始处理队列中的setTimeout。由于后续存在多个setTimeout调用,它们均会被加入等待队列中。
队列中函数的执行顺序由setTimeout的第二个参数(延迟时间)决定,例如:
延迟时间与执行顺序判定
setTimeout(function(){
var time3=new Date().getTime();
console.log(3,time3);
},1000);
主程序执行完毕后1000毫秒,对应的代码将被执行;若延迟时间设为2000毫秒,则主程序结束后2000毫秒执行。核心要点是:延迟时间始终相对于主程序执行完毕的时刻计算,且多个setTimeout的执行顺序取决于该延迟时间。若某个setTimeout回调执行耗时极长(如参考图中数字2和5对应的时间点),由于JavaScript是单线程模型,程序会先执行完当前回调,再处理下一个。若下一个setTimeout的延迟时间差值小于前一个回调的消耗时间,则前一个回调结束后立即执行下一个;若差值大于消耗时间,则按照与主程序约定的延迟时间执行。
总结
总结
以上内容为本文的全部讲解,希望能为读者的学习或工作提供有益参考。如有任何疑问,欢迎留言交流,感谢支持。
JavaScript怎么遍历对象的Symbol键和不可枚举属性
2026-11-05 13:13:39
封装一个健壮的JS字符串判空工具函数
2026-11-05 12:16:14
JavaScript合并数组的三种常用方法:concat、扩展运算符与push
2026-11-05 11:22:29
JavaScript立即执行函数(IIFE)是什么及基本语法
2026-11-05 10:51:19
JS对象数组转字符串为什么推荐用JSON.stringify()
2026-11-05 09:40:31
