上次说了这两个定时器的缺点,这次聊聊互相模拟。
function mySetInterval(fn, t){
let timer = null;
function interval(){
fn();
timer = setTimeout(interval, t)
}
interval();
return {
clear: ()=>{
clearTimeout(timer)
}
}
}
let a = mySetInterval(()=>{
console.log('xxx')
},1000)
复制代码
说实话突然被问了一句有什么好处,我当时挺懵懵的。因为对定时器并不了解,只是会用而已。
后来研究了这俩“货”的生辰八字。上篇有讲到哦。后来有点作火入魔了。因为我知道了他俩的缺陷都是设置好的时间,在实际运行过程中有很多因素会影响回调函数执行的时机。既然已经知道了setInterval的缺点是不一定按时重复,有可能连续执行,有可能跳过某个回调函数。那setTimeout模拟就一定要解决这个问题,所以实现两个功能,第一在主线程中有定时器就不能添加新的定时器。第二就是在规定时间内重复执行回调函数。有什么好处应该就是这两个吧,有其他的我也想不出来了,有会的兄弟姐妹萌可以指点一发哦。感谢感谢。
那反过来模拟岂不美哉,执行一次setInterval就清除掉不就行了。我理解是这样的。
function mySetTimeout(fn, t){
let timer = setInterval(()=>{
fn();
clearInterval(timer)
},t)
}
let a = mySetTimeout(()=>{
console.log('xxx')
},1000)
复制代码
这个呢并没有考虑穿参的情况。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END





















![[桜井宁宁]COS和泉纱雾超可爱写真福利集-一一网](https://www.proyy.com/skycj/data/images/2020-12-13/4d3cf227a85d7e79f5d6b4efb6bde3e8.jpg)

![[桜井宁宁] 爆乳奶牛少女cos写真-一一网](https://www.proyy.com/skycj/data/images/2020-12-13/d40483e126fcf567894e89c65eaca655.jpg)