关于 setTimeout 和 setInterval 的理解

互动式理解setTimeout和setInterval 阅读详情

关于 setTimeout 和 setInterval 的理解

定时器对队列的工作方式是,当特定的时间过去后将代码插入。注意,给队列添加代码并不意味着对它立刻执行,而只能表示它会尽快执行。设定一个 150 ms 后执行的定时器不代表到了 150ms 后代码立即执行,它表示在 150 ms后,代码被放入队列中。如果这个时间段,队列没有其他要执行的程序,则执行定时器,如果有,则等待其他程序执行完之后执行定时器程序。
                             -———《JavaScript高级程序设计》

一、setTimeout 和 setInterval 的区别

setTimeout 和 setInterval 都是异步执行

1 . setTimeout

/* 表示在 200 ms 后执行 func 函数 */

/* 第一种写法 */
setTimeout(func,200)

/* 第二种写法,可以给func传参 */
setTimeout("func(arg)",200)

/* 清除定时器 */
var timeId = setTimeout("func(arg)",200)
clearTimeout(timeId)

2 . setInterval

/* 表示每 200 ms 执行一次 func 函数,是个重复定时器 */

/* 第一种写法 */
setInterval(func,200)

/* 第二种写法,可以给func传参 */
setInterval("func(arg)",200)

/* 清除定时器 */
var timeId = setTimeout("func(arg)",200)
cleartInterval (timeId)

二、使用 setTimeout 实现 setInterval

  为什么使用我们要使用 setTimeout 实现 setInterval 呢?因为 setInterval 在使用中存在两个问题:(1) 某些事件间隔被跳过(事件处理程序与定时器的执行时间相差无几时);(2)多个定时器的代码执行时间可能会比预期时间少。
  使用 setTimeout 实现的 setInterval ,这样做的好处是,在前一个定时器执行完成之前,不会向队列中添加新的定时器,确保不会缺少时间间隔;保证在下一个定时器执行之前,至少等待指定毫秒的间隔,避免了连续运行

setTimeout(function(){
    //doSomething
    setTimeout(arguments.callee,interval)  // arguments.callee获取对当前执行的函数的引用,并未其设置一个定时器
},interval)

经典面试题

var i = 0;
setTimeout(function() {
    console.log(i);
}, 0);
console.log(i);
i++;
setTimeout(function() {
    console.log(i);
}, 0);
console.log(i);
i++;
setTimeout(function() {
    console.log(i);
}, 0);
console.log(i);
i++;

// 输出: 0 1 2 3 3 3

参考文献

  1. 《javascript高级程序设计》
  2. http://www.cnblogs.com/destinyruru/p/5823760.html
前端开发:JS中setTimeout和setInterval的对比使用 前言 在前端开发过程中,关于计时器的使用是非常常用的知识点,也是非常重要的,尤其是需要规定延迟多久之后再去执行某个操作。在JS的计时器使用中有setTimeout和setInterval,二者都是定时器,但是它们是有差异性的。无论是在实际开发使用还是求职面试的时候,setTimeout和setInterval的对比使用都是非常重要的知识点,那么本篇博文就来分享一下关于setTimeout和setInterval的对比使用吧。 JS定时器 JS的定时器有两个方法:setTimeout()和set 阅读详情

相关推荐

手势控制 Python !Leap Motion Python 开发教程 (二)

手势控制 Python !Leap Motion Python 开发教程 (二) 现在进入正题,我来给大家总结一下我在使用 Leap Motion 开发过程中的经验以及学到的东西,其中我会概括以及翻译官方给出的注释,为了让这些注释更加通俗易懂,让大家更好理解。 回顾 在上一篇文章中我们讲了如何配置 Leap Motion 的 Python 2.7 的开发环境,如果您还没有配置好您的开发环境,可以参...

成畅的博客 3192

JS中setTimout和setInterval的区别

如果想重复执行某些代码,可以将setTimeout包含于被执行函数中,然后在函数外再次使用setTimeout来达到定时执行的目的。或者使用setInterval,需要clearInterval()手动停止。在JavaScript中,setTimeout()是延时器,setInterval()是定时器。setTimeout(fn(),delay)在执行时,是在载入后延迟指定时间后,去执行一次表达式,,而setInterval(fn(),delay)在载入后,每隔指定的时间就执行一次表达式 所以是不一样的。

小七爱干饭的博客 939

告别卡顿!OBS Studio最佳录制参数设置指南(适合游戏/网课/会议场景)

本文提供OBS Studio录制参数优化指南,针对游戏、网课及会议三大场景,详细解析帧率、码率与编码器设置。重点推荐利用硬件编码器(如NVENC)实现游戏录制零卡顿,并分享清晰稳定的网课录制与长时间会议录制配置方案,助你告别视频卡顿与音画不同步问题。

e4f5g6h7的博客 1333

js中的定时器 setTimeout()和setInterval()

JavaScript 定时器,有时也称为“计时器”,用来在经过指定的时间后执行某些任务,类似于我们生活中的闹钟。JavaScript 中提供了两种方式来设置定时器,分别是 setTimeout() 和 setInterval()

不想学习的打工人的博客 2428

AXI4-Stream FIFO IP核实战指南——从配置到跨时钟域处理

本文是AXI4-Stream FIFO IP核的实战指南,详细讲解了其作为数据流缓冲核心的作用。文章重点涵盖从Vivado环境下的IP核配置、关键参数(如深度与宽度)设定,到跨时钟域处理的完整流程。深入解析了TVALID/TREADY握手协议及TLAST等信号,并提供了常见问题排查与调试技巧,帮助开发者高效实现FPGA/SoC系统中可靠的数据流缓冲与同步。

weixin_29251567的博客 480

JS定时器整理(执行一次setTimeout、重复执行setInterval)

js定时器整理(执行一次setTimeout、重复执行setInterval) 在javascritp中,有两个关于定时器的专用函数,分别为: 1.倒计定时器:timename=setTimeout(“function();”,delaytime); ​2.循环定时器:timename=setInterval(“function();”,delaytime); 第一个参数“function()”是定时器触发时要执行的动作,可以是一个函数,也可以是几个函数,函数间用“;”隔开即可。 比如要弹出两个警告窗口,

CC酱写前端的博客 7829

ADC选型实战:从参数指标到精准应用的工程指南

本文深入解析ADC(模数转换器)选型的关键参数与实战技巧,涵盖分辨率、转换误差等核心指标,并提供高精度温度测量、高速数据采集等五大应用场景的选型指南。通过实际案例和代码示例,详细讲解校准方法、功耗优化策略及常见问题排查,帮助工程师实现从参数指标到精准应用的工程实践。

weixin_29166013的博客 326

定时器 setTimeout、setInterval详解

不过这也不影响结论是正确的^_^,好了,文章到这就结束了,有问题大家可以在评论区留言哈,拜拜👋。定时器概念了解了,也会造定时器了,那这个定时器什么时候调用呢,因为我们的javaScript代码是从上到下,逐行执行,那到了定时器这行我们的进程会不会等定时器执行完了再执行定时器后面的代码呢?遇到定时器,会将定时器加入到任务队列中(宏任务),等所有代码执行完了,程序会看一下队列中还有什么没有完成的,如果有没完成的,就执行一下。定时器按我个人理解来说就是固定某个时间后,时间到了,就提醒我时间到了。.........

Smallwhitestrive的博客 3万+

华为od 面试八股文_C++_02_含答案

华为od 面试八股文_C++_02_含答案

MISAYAONE的博客 3121

Open3D DBSCAN聚类

DBSCAN算法做为一种有名的密度聚类算法,它是通过邻域参数(Distance,MinPts)来刻画样本分布的紧密程度。而在真正开始之前,首先要理解下面这几个概念:更为具体的内容也可参考这篇文章点云DBSCAN聚类算法。...

dayuhaitang1的博客 1795

setTimeout和setInterval的深入理解

setTimeout和setInterval的深入理解 以前写的setTimeout和setInterval的文章有些不足之处,今天抽时间整理了一下,要想真正理解还得从javascript的单线程机制说起 大概半年前发表过一篇关于setTimeout和setInterval的文章,但是现在回去仔细一看发现其实存在很多不足以及错误。事实上,se...

weixin_30496751的博客 98

学Simulink——基于Simulink的固态变压器(SST)多级协同控制​

本文介绍了基于Simulink的固态变压器(SST)多级协同控制系统设计与仿真方法。SST作为智能电网关键设备,包含AC-DC整流、DC-DC隔离和DC-AC逆变三级变换器。针对级间耦合问题,提出了能量-功率协同控制策略,通过纵向解耦和横向联动实现稳定运行。详细演示了在Simulink中搭建三级主电路、设计协同控制器(含电网定向控制、功率前馈和虚拟惯性控制)的全过程,并通过负载突变测试验证了系统动态性能(直流母线电压波动<2%)。最后给出了工程部署建议,包括数字控制延时补偿、启动序列设计和代码自动生成

xiaoheshang_123的博客 203

理解setTimeout和setInterval

甚至可能会错误的把两个实现定时调用的函数理解成了类似thread一样的东西, 认为会在一个时间片内, 并发的执行调用的函数, 似乎很好很强大, 但其实并不是如此, 实际的情况是javascript都是以单线程的方式运行于浏览器的javascript引擎中的, setTimeout和setInterval的作用只是把你要执行的代码在你设定的一个时间点插入js引擎维护的一个代码队列中, 插入代码队列并...

jc_dreaming2的博客 149

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

深入理解 setTimeout和setInterval

https://www.cnblogs.com/ellisonzhang/p/10558899.html 转载于:https://www.cnblogs.com/huhuxixi/p/10561161.html

weixin_30914981的博客 91

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

setTimeout 和 setInterval的区别和理解

setInterval() - 间隔指定的毫秒数不停地执行指定的代码(一直执行)。 setTimeout() - 在指定的毫秒数后执行指定代码(只执行一次)。

hanshilong100的博客 1922

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

setTimeout和setInterval的概念理解

setTimeout和setInterval的概念理解

m0_72030584的博客 664

定时器系列——理解setTimeout和setInterval

前面的话   很长时间以来,定时器一直是javascript动画的核心技术。但是,关于定时器,人们通常只了解如何使用setTimeout()和setInterval(),对它们的内在运行机制并不理解,对于与预想不同的实际运行状况也无法解决。本文将详细介绍定时器的相关内容   setTimeout()   setTimeout()方法用来指定某个函数或字符串在指定的毫秒数之后执行。它返回一个整数,表示

1674

关于setTimeout和setInterval的理解

setTimeout和setInterval为浏览器工具箱自带的原生方法,他们的底层为创建一个timeout对象或inerval对象来实现计时器 node由于node引擎的辅助工具集成了一些浏览器工具箱自带的原生方法,所以node引擎中也能调用sertInterval和sertTimeout 这两个函数返回到外部的结果为Number类型的计时器编号 clearTimeout或者clearIn...

小柒的博客 469

一篇深度理解setInterval和setTimeout以及JS执行机制

https://www.jianshu.com/p/9b1e22e0dc55

qq_45141428的博客 172

理解使用setTimeout和setInterval

setTimeout和setInterval 要充分理解javaScript是运行于单线程环境的。 在javaScript中没有任何代码是立即执行的,但是一旦进程空闲下来就会尽快执行 setTimeout:指定的毫秒数后调用函数(引用函数)或计算表达式(js代码串) //调用函数 function a() { console.log(1231); } setTimeout(a, 1000); /...

Super红领巾 295

深入理解定时器系列第一篇——理解setTimeout和setInterval

前面的话   很长时间以来,定时器一直是javascript动画的核心技术。但是,关于定时器,人们通常只了解如何使用setTimeout()和setInterval(),对它们的内在运行机制并不理解,对于与预想不同的实际运行状况也无法解决。本文将详细介绍定时器的相关内容 setTimeout()   setTimeout()方法用来指定某个函数或字符串在指定的毫秒数之后执行。...

weixin_30500663的博客 93

深入理解setTimeout和setinterval

  以前一直以为这两个函数就是简单了认为类似thread一样的东西, 认为会在一个时间片内, 并发的执行调用的函数, 似乎很好很强大, 但其实并不是如此, 实际的情况是javascript都是以单线程的方式运行于浏览器的javascript引擎中的, setTimeout和setInterval的作用只是把你要执行的代码在你设定的一个时间点插入js引擎维护的一个代码队列中, 插入代码队列并不意味着...

weixin_30675967的博客 111

SetTimeout、SetInterVal、setImmediate和process.nextTick的理解

起航 以前都是在掘金上看别人的文章,好的点个赞。逛github的时候,也只是喜欢看别人源码,也从不在git上上传东西。今天突然萌发了自己想要发一些东西,方便自己以后查阅,也能让大家指点一下,是否正确。免得在错误的道路上越走越远,还和正确的人争论的面红耳赤。毕竟一旦确立了错误的观点,那么错误的观点就会在你潜意识里变成正确的了。 疑问 正常情况下,setTimeout、setInterval、se...

weixin_34050389的博客 1102
上一篇: 关于 apply,call 和 bind 的理解
下一篇: Webpack 总结
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值