为什么要用setTimeout代替setInterval

博客参考 点击,需要注意的是这两个定时器并不是定时执行,一般会延后一点点,秒数所表示的是,在一定时间后,被放入到队列中

setInterval的缺陷

  1. 使用 setInterval某些间隔会被跳过不执行

    • 当使用 setInterval时,仅当队列中没有该定时器的任何其他代码时,才会将定时器代码加入到队列中
    • 可以这么理解:每个setTimeout产生的任务会直接push到任务队列中;而setInterval在每次把任务push到任务队列前,都要进行一下判断(看上次的任务是否仍在队列中)
  2. 可能多个定时器会连续执行

如果使用setTimeout模拟setInterval,就会规避上面两个缺点

setTimeout模拟setInterval

  1. 写上需要一定时间执行的代码,如第一部分
  2. 复制粘贴模拟的代码,即第二部分
  3. 第三部分可写可不写,但是如果写的话需要写在模拟的函数体内,他表示满足了一定的条件之后清除定时器
      // 第一部分let index = 1const fn1 = () => {console.log("number = ", index++)}// 第二部分const simulateInterval = (callback,interval) => {let timerId = null;function fn() {callback();// 第三部分 :条件if(index === 5){return clearTimeout(timerId)}const prevTimmerId = timerId;timerId = setTimeout(fn, interval);clearTimeout(prevTimmerId);}return setTimeout(fn, interval);}const intervalId = simulateInterval(fn1,1000)
  • 此外还需要注意,如果有条件进行计时器的停止的话,是否需要将条件进行重置
  • 且如果定时器内是异步请求的话,全局的条件也要在启动 simulateInterval 函数时进行重置

本质

  1. 实质上,使用setTimeout来模拟setInterval的本质是一个递归调用
  2. 递归调用 simulateInterval 内部的自定义的 fn 函数
  3. 而条件就是递归出口

项目中用setTimeout代替setInterval相关推荐

  1. JavaScript 中的 setTimeout 和 setInterval 方法

    有时您不希望函数立即运行.您希望它重新执行,甚至在特定时间间隔后重复运行.JavaScript 为我们提供了两种实现方法: setTimeout 和 setInterval.下面,我们将来理解这两个方 ...

  2. javascript requestAnimationFrame 解决 setTimeout、setInterval 时间不准的方法。

    javascript requestAnimationFrame 解决 setTimeout.setInterval 时间不准的方法. 取代 setInterval <!DOCTYPE html ...

  3. setTimeOut()和setInterval()的用法

    setTimeOut()和setInterval()的用法 setTimeOut(function(){},1000); 在特定时间之后调用函数,只调用一次 setInterval(function( ...

  4. iOS 项目中用到的一些开源库和第三方组件

    iOS 项目中用到的一些 iOS 开源库和第三方组件 分享一下我目前所在公司 iOS 项目中用到的一些 iOS 开源库和第三方组件, 感谢开源, 减少了我们的劳动力, 节约了我们大量的时间, 让我们有 ...

  5. setTimeout和setInterval实现定时器的区别

    这两个方法都能够用来实现在一个固定时间段之后去运行JavaScript.只是两者各有各的应用场景. 方 法 实际上,setTimeout和setInterval的语法相同.它们都有两个参数,一个是将要 ...

  6. js中计时器setTimeout、setInterval、requestAnimationFrame区别

    转载自:https://www.cnblogs.com/xiaohuochai/p/5777186.html 本文仅用于作为学习笔记 计时器一直是javascript动画的核心技术.而编写动画循环的关 ...

  7. setTimeout和setInterval的使用

    (节选自JavaScript精粹) 这两个方法都可以用来实现在一个固定时间段之后去执行JavaScript.不过两者各有各的应用场景. 方 法 实际上,setTimeout和setInterval的语 ...

  8. JavaScript———从setTimeout与setInterval到AJAX异步

    setTimeout与setInterval执行 首先我们看一下以下代码打印结果 1 2 3 4 5 6 7 console.log(1); setTimeout(function() { conso ...

  9. js的事件循环机制:同步与异步任务(setTimeout,setInterval)宏任务,微任务(Promise,process.nextTick)...

    javascript是单线程,一切javascript版的"多线程"都是用单线程模拟出来的,通过事件循环(event loop)实现的异步. javascript事件循环 事件循环 ...

  10. setTimeout和setInterval你真的了解吗?

    setTimeout和setInterval这两个函数, 大家肯定都不陌生, 但可能并不是每个用过这两个方法的同学, 都了解其内部的实质, 甚至可能会错误的把两个实现定时调用的函数理解成了类似thre ...

最新文章

  1. consul使用的一些见解
  2. (转)微信公众平台关于fakeid和openid的解析
  3. java cache system_JCS(Java Cache System)基本结构分析和使用
  4. 计算机基础(一):ION IOMMU 内存申请
  5. sql server 配置管理器里为什么是32位_FT VIEW | SE高级应用之数据存入SQL数据库
  6. 苹果cmsV10资源采集插件
  7. Computer Networking——transport layer QA
  8. Hard!168 · 吹气球
  9. 禁止搜索引擎收录的方法
  10. 程序员天天写代码,如何拓展社交圈?
  11. flink程序:Exceeded checkpoint tolerable failure threshould
  12. 用HTML5绘制的一个星空特效图
  13. 利用libjpeg库实现jpg与bmp图片互转指南
  14. [转载]尺度函数与小波函数
  15. C语言——PTA 用格里高利公式求给定精度的PI值
  16. C++ Reference: Standard C++ Library reference: C Library: cstdio: vsprintf
  17. maven手工安装依赖包
  18. 【题解】CF808G Anthem of Berland
  19. lvgl设置在屏幕上显示当前帧率(FPS)
  20. java 斑马 打印不出来_java – Zebra打印机GC420t无法打印图像EPL 2 GW

热门文章

  1. 《人是如何学习的》的读后感范文4000字
  2. Python写幂函数
  3. Unity Spine动画如何选定帧数(时间)播放
  4. 视频或动画丢帧_概念介绍和解决策略
  5. 宇枫资本女性刚工作理财建议
  6. 浏览器0x80004005 无法上网
  7. 80004005错误代码_Win7系统提示0X80004005错误代码怎样解决 Win7系统错误代码0x80004005的解决办法...
  8. 蓝牙定位在各行业领域中的应用及蓝牙定位原理浅析-新导智能
  9. Arm 架构的过程调用标准
  10. el-descriptions的入门学习