// 实现1:回调函数consttask=(timer,fn,callback)=>{constid=setTimeout(()=>{fn()callback()},timer)console.log('id',id)}constmySetInterval=(fn,timeout)=>{task(timeout,fn,()=>{task(timeout,fn,()=>mySetInterval(fn,timeout))})}mySetInterval(()=>{console.log(11111)},1000) //...
setTimeout传入的是两个参数,第一个参数是cb代表的是回调函数callback,第二个代表的是时间,以ms计算 setInterval传入的也是两个参数,第一个参数是cb代表的是回调函数callback,第二个代表的也是时间,以ms计算 区别和注意点 setTimeout含义是定时器,到达一定的时间触发一次,但是setInterval含义是计时器,到达一定时间...
使用setInterval 时,某些间隔会被跳过; 可能多个定时器会连续执行; 可以这么理解:每个 setTimeout 产生的任务会直接 push 到任务队列中;而 setInterval 在每次把任务 push 到任务队列前,都要进行一下判断(看上次的任务是否仍在队列中,如果有则不添加,没有则添加)。 因而我们一般用 setTimeout 模拟 setInterval,...
使用setTimeout来模拟setInterval可以提供更多控制,避免setInterval可能导致的问题,如多个间隔重叠。在上面的代码中,customSetInterval函数接受一个函数和执行间隔作为参数。函数repeat被定义来递归调用setTimeout,从而不断重复执行输入的函数。 function betterSetInterval(func, interval) { let timeout; const loop = ()...
使用 setTimeout 实现 setInterval function mySetInterval(fn,delay,...args) { let cancel = false; const task = () => { setTimeout(() => { if (!cancel) { fn(...args) task(); } },delay) } task(); return () => { cancel = true };}const ...
1、使用 setTimeout实现setInterval 实现原理:setTimeout执行完毕后设置一个新的setTimeout,就可以模拟...
const _setInterval = (fn, misc) => { const interval = () => { setTimeout(interval, misc); fn(); }; setTimeout(interval, misc); }; 全部评论 推荐最新楼层 01-01 21:48 四川大学 Java 先接受,问清原因再解决 最近神哥贴子的流量好差,希望大家多多送花点赞收藏转发关注~一键五连🤣职场情...
综上所述, setInterval 有两个缺点: 使用setInterval 时,某些间隔会被跳过; 可能多个定时器会连续执行; 可以这么理解:每个 setTimeout 产生的任务会直接 push 到任务队列中;而 setInterval 在每次把任务 push 到任务队列前,都要进行一下判断(看上次的任务是否仍在队列中,如果有则不添加,没有则添加)。
可以这么理解:每个 setTimeout 产生的任务会直接 push 到任务队列中;而 setInterval 在每次把任务 push 到任务队列前,都要进行一下判断(看上次的任务是否仍在队列中,如果有则不添加,没有则添加)。 因而我们一般用 setTimeout 模拟 setInterval,来规避掉上面的缺点。
最常见的出现的就是,当我们需要使用 ajax 轮询服务器是否有新数据时,必定会有一些人会使用 setInterval ,然而无论网络状况如何,它都会去一遍又一遍的发送请求,最后的间隔时间可能和原定的时间有很大的出入。 二、setInterval 缺点 与 setTimeout 的不同 ...