使用setTimeout实现setInterval

197 阅读1分钟

今天刷文章的时候,看到有一个人面试的时候遇到这么一个面试题

使用setTimeout实现setInterval

然后就做起来实现了一下,包含两部分,对应于setInterval,clearInterval

setInterval实现

const mySetInterval = (func: Function, time: number) => {
  let timer: any = [];
  function setInterval() {
    timer[0] = setTimeout(() => {
      func();
      setInterval();
    }, time);
  }
  setInterval();
  return timer;
};

clearInterval实现

function myClearInterval(timer: any) {
  if (timer[0]) {
    clearTimeout(timer[0]);
  }
}

测试如下

const timer = mySetInterval(() => {
  console.log("---");
}, 1000);

setTimeout(() => {
  myClearInterval(timer);
}, 6050);