10.setTimeout和setInterval的区别以及模拟实现:

  • setTimeout:推迟ms后执行一次;(延时器)
  • setInterval:间隔ms就重复执行。(重复定时器)

使用setTimeout和setInterval会出现误差(感兴趣的小伙伴可以自己测试一下)。

  • 出现误差的原因:跟JS的 Event loop有关。(定时器不是同步任务,而是异步任务中的宏观任务)

    • 关于事件循环可以参考这篇 动图学习-eventloop
    • 定时器中的时间参数不是到点就立即执行,而是到点了再将其回调事件加入事件队列中。
    • 执行顺序再根据定时器前面是否还有比它优先级更高的任务队列,如果有则需要等待。
    • 解决方案
  • setInterval 的缺点:
    • setInterval在任务推入异步队列时判断上次异步任务是否被执行,这就会导致 setInterval在事件循环的时候会出现耗时操作,比如调用异步操作耗时,会导致异步任务不按照期待的时间间隔内执行。
  • 使用setTimeout 模拟setInterval 规避setInterval 的缺点:
    • 原因:setTimeout 是不管上次异步任务是否完成,都会将当前异步任务推入队列。
        function mysetInterval(fn, delay) {let timer = null;function interval() {fn();timer = setTimeout(interval, delay);}interval();return {cancel: () => {clearTimeout(timer);}}}let a = mysetInterval(() => {console.log(111);}, 1000)let b = mysetInterval(() => {console.log(222)}, 1000)
  • 使用setTimeInterva实现setTimeout:
        const mysetTimeout = (fn, delay) => {const timer = setTimeout(() => {clearInterval(timer);fn();}, delay);}

10.setTimeout和setInterval的区别以及模拟实现:相关推荐

  1. setTimeout和setInterval的区别

    setTimeout和setInterval的区别 javascript都是以单线程的方式运行于浏览器的javascript引擎中的, setTimeout和setInterval的作用只是把你要执行 ...

  2. JS setTimeout和setInterval的区别

    1.setTimeout和setInterval都属于JS中的定时器,可以规定延迟时间再执行某个操作,不同的是setTimeout在规定时间后执行完某个操作就停止了,而setInterval则可以一直 ...

  3. setTimeout()和setInterval()的区别和转换

    定义 setTimeout()和setInterval()经常被用来处理延时和定时任务.setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式,而setInterval()则可以在每隔 ...

  4. 链式调用setTimeout()与setInterval()的区别

    使用 setTimeout()和 setInterval()创建的定时器可以用于实现有趣且有用的功能.执行时机是不能保证的,因为在页面的生命周期中,不同时间可能有其他代码在控制 JavaScript ...

  5. vue定时器的写法和setTimeout和setInterval的区别

    0.前言介绍 setTimeout和setInterval都属于JS中的定时器,可以规定延迟时间再执行某个操作,不同的是setTimeout在规定时间后执行完某个操作就停止了,而setInterval ...

  6. setTimeOut与setInterval的区别

    有关这两个概念,很多朋友在刚接触时都有过迷惑,今天就再讨论一下,如果有不对的地方,欢迎各位拍砖,扔鸡蛋,扔鞋.在这里完全欢迎. 说起扔鞋,就不得不提10月7日晚司马南在海南大学演讲时遭学生扔鞋的事情, ...

  7. setTimeout 和 setInterval 的区别

    setTimeout (表达式,延时时间) setInterval(表达式,交互时间) 延时时间/交互时间是以豪秒为单位的(1000ms=1s)setTimeout 在执行时,是在载入后延迟指定时间后 ...

  8. js中两种定时器,setTimeout和setInterval的区别

    2019独角兽企业重金招聘Python工程师标准>>> setTimeout只在指定时间后执行一次,代码如下: <script> //定时器 异步运行 function ...

  9. js 定时器用法详解——setTimeout()、setInterval()、clearTimeout()、clearInterval()

    写在前面: 在js应用中,定时器的作用就是可以设定当到达一个时间来执行一个函数,或者每隔几秒重复执行某段函数.这里面涉及到了三个函数方法:setInterval().setTimeout().clea ...

最新文章

  1. 想学Python,梦雅给你指一条明路!
  2. 校招c语言面试题目及答案,C/C++学习之路(一)校招后端面试题及答案(作者回忆版)...
  3. java等号_java等号
  4. Dlib学习笔记:解决dlib array2d转 OpenCV Mat时颜色失真
  5. OpenFOAM各版本说明介绍
  6. ps图片拖不进去_PS教学:你的logo还不够高大上?7步教做出黄色金属质感logo
  7. 前端学习(3135):react-hello-react之函数的柯里化
  8. 完美日记:保障电商大促活动平稳运行
  9. e-mobile帐号状态存在异常_Java 常见异常种类
  10. c语言中typeof关键字
  11. 浙大与北大计算机考研分数线,34所985大学考研分数线全部出炉,清华大学北大浙大等都接收调剂...
  12. JUnit编写单元测试代码注意点小结
  13. 如何让ul的符号隐藏_HTML+CSS之如何找BUG
  14. WEB测试到移动测试的转换
  15. 框架基础:ajax设计方案(一)---集成核心请求
  16. Bind 一些有趣的东西 【未完待续】
  17. blaster 驱动_为什么2020年IR Blaster在手机上仍然有用
  18. Android蓝牙音量调节,安卓 蓝牙音量控制 Bluetooth Volume Control v2.40 付费高级特别版...
  19. Linux-2.6 open()打开文件涉及的内核处理和数据结构分析
  20. 封装HDLC协议实现两个路由器互相通信

热门文章

  1. mysql连接查询、自查询
  2. 悲观锁与乐观锁的区别 和 Redis中的watch
  3. 神经网络之BP(反向传播算法)的原理介绍
  4. 【opencv学习】【图像直方图和均衡化】
  5. 滤镜功能针的萌翻了!Snapchat为狗狗配戴眼镜
  6. php 神经网络,神经网络算法基础入门
  7. 「翻译」Vue3 相比 Vue2 都有哪些优化?
  8. libreCAD源码阅读笔记3
  9. Python Tricks : Function Argument Unpacking
  10. 趣图:深度学习之大炮打蚊子