10.setTimeout和setInterval的区别以及模拟实现:
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的区别以及模拟实现:相关推荐
- setTimeout和setInterval的区别
setTimeout和setInterval的区别 javascript都是以单线程的方式运行于浏览器的javascript引擎中的, setTimeout和setInterval的作用只是把你要执行 ...
- JS setTimeout和setInterval的区别
1.setTimeout和setInterval都属于JS中的定时器,可以规定延迟时间再执行某个操作,不同的是setTimeout在规定时间后执行完某个操作就停止了,而setInterval则可以一直 ...
- setTimeout()和setInterval()的区别和转换
定义 setTimeout()和setInterval()经常被用来处理延时和定时任务.setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式,而setInterval()则可以在每隔 ...
- 链式调用setTimeout()与setInterval()的区别
使用 setTimeout()和 setInterval()创建的定时器可以用于实现有趣且有用的功能.执行时机是不能保证的,因为在页面的生命周期中,不同时间可能有其他代码在控制 JavaScript ...
- vue定时器的写法和setTimeout和setInterval的区别
0.前言介绍 setTimeout和setInterval都属于JS中的定时器,可以规定延迟时间再执行某个操作,不同的是setTimeout在规定时间后执行完某个操作就停止了,而setInterval ...
- setTimeOut与setInterval的区别
有关这两个概念,很多朋友在刚接触时都有过迷惑,今天就再讨论一下,如果有不对的地方,欢迎各位拍砖,扔鸡蛋,扔鞋.在这里完全欢迎. 说起扔鞋,就不得不提10月7日晚司马南在海南大学演讲时遭学生扔鞋的事情, ...
- setTimeout 和 setInterval 的区别
setTimeout (表达式,延时时间) setInterval(表达式,交互时间) 延时时间/交互时间是以豪秒为单位的(1000ms=1s)setTimeout 在执行时,是在载入后延迟指定时间后 ...
- js中两种定时器,setTimeout和setInterval的区别
2019独角兽企业重金招聘Python工程师标准>>> setTimeout只在指定时间后执行一次,代码如下: <script> //定时器 异步运行 function ...
- js 定时器用法详解——setTimeout()、setInterval()、clearTimeout()、clearInterval()
写在前面: 在js应用中,定时器的作用就是可以设定当到达一个时间来执行一个函数,或者每隔几秒重复执行某段函数.这里面涉及到了三个函数方法:setInterval().setTimeout().clea ...
最新文章
- 想学Python,梦雅给你指一条明路!
- 校招c语言面试题目及答案,C/C++学习之路(一)校招后端面试题及答案(作者回忆版)...
- java等号_java等号
- Dlib学习笔记:解决dlib array2d转 OpenCV Mat时颜色失真
- OpenFOAM各版本说明介绍
- ps图片拖不进去_PS教学:你的logo还不够高大上?7步教做出黄色金属质感logo
- 前端学习(3135):react-hello-react之函数的柯里化
- 完美日记:保障电商大促活动平稳运行
- e-mobile帐号状态存在异常_Java 常见异常种类
- c语言中typeof关键字
- 浙大与北大计算机考研分数线,34所985大学考研分数线全部出炉,清华大学北大浙大等都接收调剂...
- JUnit编写单元测试代码注意点小结
- 如何让ul的符号隐藏_HTML+CSS之如何找BUG
- WEB测试到移动测试的转换
- 框架基础:ajax设计方案(一)---集成核心请求
- Bind 一些有趣的东西 【未完待续】
- blaster 驱动_为什么2020年IR Blaster在手机上仍然有用
- Android蓝牙音量调节,安卓 蓝牙音量控制 Bluetooth Volume Control v2.40 付费高级特别版...
- Linux-2.6 open()打开文件涉及的内核处理和数据结构分析
- 封装HDLC协议实现两个路由器互相通信