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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • CentOS8 Docker 端口映射

    CentOS8 Docker 端口映射概念端口映射:端口映射就是将内网中的主机的一个端口映射到外网主机的一个端口,提供相应的服务。当用户访问外网IP的这个端口时,服务器自动将请求映射到对应局域网内部的机器上。例:我们在内网中有一台Web服务器,但是外网中的用户是没有办法直接访问该服务器的。于是我们可以在路由器上设置一个端口映射,只要外网用户访问路由器ip的80端口,那么路由器会把自动把流量转到内网Web服务器的80端口上。使用使用:dockerrun–namecontainer-name:tag-d-p服务器端口:Doc

    2022年10月18日
    0
  • 《善数者成:大数据改变中国》读书笔记3

    《善数者成:大数据改变中国》读书笔记3第八章撬动商业:新“规模经济”,数最懂你每一个消费者在消费的过程中留下数据,就会形成商业大数据。“”智慧门店”与天猫围绕新零售在新品首发、渠道管理、大数据赋能和线上线下全渠道融合等领域展开一揽子合作。向新零售转变,卖货层面是最直接的,其次是数据要打通。海澜之家采用RFID技术给2亿件衣服分配了各自的身份编码,进而实现了线上下单、线下发货,并在门店之间实现了数据共享互通,让一条条销售数据从“碎片”走向“整合”,然后又通过大数据分析,更好地分析和洞察消费者需求,及时调整经营策略,降低整体经营性投入,最终

    2022年8月30日
    3
  • 计算机cpu后面字母代表什么意思,英特尔CPU型号中最后的字母什么意思?如有不懂欢迎驻足停留…「建议收藏」

    计算机cpu后面字母代表什么意思,英特尔CPU型号中最后的字母什么意思?如有不懂欢迎驻足停留…「建议收藏」今天给大家主要讲讲Intel(英特尔)处理器的小常识。可能说过比较多遍了,但是今天说的比较具体,对大家以后要买CPU得有个参考。在Intel处理器中,有各种型号的U,这些型号中后缀都自带字母,比如K、X、M等等,不过还要区分笔记本和台式,相对来说笔记本电脑带的更多,今天就给大伙好好普及一下,如有遗漏,欢迎你们的替补喔。笔记本电脑:M:一般是双核处理器。M前面一位数字是0,就是标准电压处理器(功耗为…

    2022年6月21日
    39
  • 《自然语言处理实战入门》 第三章 :中文分词原理及相关组件简介 —- 语言学与分词技术简介[通俗易懂]

    汉语,即汉族的语言,是中国通用语言,国际通用语言之一,属汉藏语系,汉语历史悠久,使用人数最多,世界上使用汉语的人数至少15亿,超过世界总人口的20%汉字最早起源于商朝的甲骨文,距今已经有3000-4000年的历史了。文字的目的是为了记录,古汉语以独字为核心,即使隋唐以后汉语书面语逐渐向口语化发展。

    2022年4月17日
    32
  • 点对点通信实验

    点对点通信实验点对点通信实验语言:python1.socket基础参考:百度百科,socket,CSDN上也有很多讲解socket的。2.python中使用的相关函数官方文档1)socket.socket(family=AF_INET,type=SOCK_STREAM,proto=0,fileno=None)AF_INET:ipv4协议SOCK_STREAM:面…

    2022年7月25日
    7
  • xshell7连接阿里云轻量级服务器PublicKey连接[通俗易懂]

    xshell7连接阿里云轻量级服务器PublicKey连接[通俗易懂]第一步:第二步:生成秘钥并下载,且在生成秘钥后重启服务器,这点要注意,不然会报找不到秘钥!!!第三步:点击刚刚生成的连接、输入用户名root第四步:点击文件,注意不是点击用户秘钥!!!,上传刚刚下载的秘钥xxx.pem.点击确定,连接成功….

    2022年7月23日
    7

发表回复

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

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