settimeout的用法_setinterval怎么用

settimeout的用法_setinterval怎么用目录参数及介绍setTimeOutsetInterval工作原理前言:JS是单线程运行的setTimeOutsetInterval情况一:fn运行时间≤时间间隔,即多数情况情况二:fn运行时间>时间间隔,即一些异常情况setTimeOut弥补setInterval的不足本文参考文章参数及介绍setTimeOutsetTimeOut(fn,delayTime)【功能】:在一定时间延迟之后开始执行一个给定的函数【参数1】:fn将要执行的函数,函数类型或者字符串类型【参数2】:

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

一、参数及介绍

setTimeOut

setTimeOut (fn, delayTime)

【功能】:在一定时间延迟之后开始执行一个给定的函数
【参数1】:fn将要执行的函数,函数类型或者字符串类型
【参数2】:delayTime要延迟的时间,Number类型,单位为毫秒
【返回】:一个id值

setInterval

setInterval (fn, interval)

【功能】:每隔时间段interval就调用fn一次
【参数1】: fn将要执行的函数,函数类型或者字符串类型
【参数2】: interval要延迟的时间,Number类型,单位为毫秒
【返回】:一个id值

二、工作原理

前言:JS是单线程运行的

因为 JS 是单线程的,在某一个特定时间点只能执行某一个特定的任务,所以会阻塞其它任务执行。对于耗时的任务(例如网络请求,I/O操作等),没有必要等待他们执行完后才继续后面的操作。在这些任务完成前,JavaScript 完全可以往下执行其他操作,当这些耗时的任务完成后则以回调的方式执行相应处理。这些就是 JavaScript 与生俱来的特性:异步与回调。
信息参考自:关于JavaScript单线程的一些事

setTimeOut

【工作原理】

  • JS是单线程执行,当执行到setTimeOut代码时开始计时,在当到达间隔时间delayTime 之后,把回调函数fn放到事件队列
  • 真正的运行时间取决于主线程何时调用事件队列中fn。(当主线程空闲下来才会去事件队列取出fn函数执行)

运行到 setTimeOut(时间点)| delayTime(时间段) | 调用函数fn(时间点)| fn执行时段(时间段)

setInterval

【工作原理】:
在执行到 setInterval 代码时,会开始计时,到达间隔时间 interval 之后,将判断:目前有没有此定时器的实例?

  • 如果没有,则将 fn 加入到事件队列中
  • 如果有,那么不会将回调函数 fn 加入到事件队列中,防止之后连续调用 fn(即非定时调用)
    弊端:导致一些间隔被跳过

情况一:fn运行时间 ≤ 时间间隔 ,即多数情况

Mon 06 Mon 13 Mon 20 fn运行时间 时间间隔 fn运行时间 时间间隔 fn运行时间 时间间隔 时间线

情况二:fn运行时间 > 时间间隔 ,即一些异常情况

Mon 06 Mon 13 Mon 20 fn运行时间 时间间隔 fn运行时间 时间间隔 fn运行时间 时间间隔 时间线

为什么会这样?

  • JS 为单线程,在一个时间段内全力只作一件事。即执行函数 fn。
  • 在 fn 运行的时,定时器没有能力终止其的运行
  • fn运行时间 > 时间间隔 interval 时,间隔时间到了,但是程序还没有执行完,那也要老老实实的等着函数执行完。

弊端?

  • 实际间隔是fn运行的时间,并非设定的时间间隔 interval,时间不精确。

三、setTimeOut弥补setInterval的不足

setTimeout(function fn(){ 
   
    // 1. 业务逻辑
	console.log('Hi')
	
    // 2. 链式调用 
    setTimeout(fn, interval);
}, interval);
  • 链式调用 setTimeout()
  • 每次函数执行的时候都会创建一个新的定时器。
  • 第二个setTimeout()调用当前执行的函数,并为其设置另外一个定时器。
  • 这样做的好处是,在前一个定时器代码执行完之前,不会向队列插入新的定时器代码,确保不会有任何缺失的间隔。
  • 而且,它可以保证在下一次定时器代码执行之前,至少要等待指定的间隔,避免了连续的运行。

四、本文参考文章

排名不分先后

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/185720.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 前端页面跳转的几种方法「建议收藏」

    前端页面跳转的几种方法「建议收藏」onclick跳转设置window的location.href属性onclick=”window.location.href=’URL’”onclick=”location=’URL’”调用window的open方法onclick=”window.open(‘URL’,’_blank’);”//在新窗口打开onclick=”window.open(‘URL’,’_…

    2025年7月29日
    5
  • mysql好还是oracle好_oracle优缺点

    mysql好还是oracle好_oracle优缺点Oracle与MySQL的区别以及优缺点MySQL的特点1、性能卓越,服务稳定,很少出现异常宕机;2、开放源代码无版本制约,自主性及使用成本低;3、历史悠久,社区和用户非常活跃,遇到问题及时寻求帮助;4、软件体积小,安装使用简单且易于维护,维护成本低;品牌口碑效应;5、支持多种OS,提供多种API接口,支持多种开发语言,对流行的PHP,Java很好的支持MySQL的缺点1、MySQL最大的缺点是其安全系统,主要是复杂而非标准,另外只有到调用mysqladmin来重读用户权限才会发生改变;2

    2025年11月17日
    5
  • springboot排除exclude

    springboot排除exclude

    2021年7月4日
    100
  • 大盘进入极度敏感区域

    大盘进入极度敏感区域《比技术面更重要的三个信息》,其中所说的三点都是凌驾于技术面的东西。非常重要,也必须时刻关注。如果股市变化通过看看K线,看看技术指标就能够掌握全局变化,那就是大笑话了。 现在,那篇评论里谈到的第一个问题就有了明显变化,美圆指数连续收出三根红K线,并且已有突破从09年3月形成的下降趋势的迹象。 和这个迹象紧密相连的另外一个变化就是石油、黄金价格持续下跌。这…

    2022年6月29日
    22
  • 414 Request-URI Too Long 15ms[通俗易懂]

    414 Request-URI Too Long 15ms[通俗易懂]这个问题是使用get请求后面跟的参数太多,造成的,解决办法是把get请求换成POST请求@POST@Path(“/poststate”)@Consumes(“application/x-www-form-urlencoded”)@Produces(MediaType.APPLICATION_JSON)publicList<UserState>getPostUserState(@FormParam(“type”)Stringtype,…

    2022年5月2日
    59
  • 外链式样式表_引入CSS样式表(书写位置)

    外链式样式表_引入CSS样式表(书写位置)CSS初识CSS(CascadingStyleSheets)美化样式CSS通常称为CSS样式表或层叠样式表(级联样式表),主要用于设置HTML页面中的文本内容(字体、大小、对齐方式等)、图片的外形(宽高、边框样式、边距等)以及版面的布局等外观显示样式。CSS以HTML为基础,提供了丰富的功能,如字体、颜色、背景的控制及整体排版等,而且还可以针对不同的浏览器设置不同的样式。引入CSS样式表(书…

    2022年7月14日
    19

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号