前端面试题 - 116. setTimeout和setInterval互相模拟

184 阅读1分钟

setTimeout 用于在指定的时间后执行一次回调函数。 setInterval 则是按照指定的时间间隔循环执行回调函数。

setTimeout模拟setInterval

执行后继续递归

function simulatedSetInterval(callback, timeout) {
  let timer = null;
  function interval() {
    timer = setTimeout(() => {
        callback();
        interval()
    }, timeout);
  }

  interval();
  
  return () => clearTimout(timer);
}

使用

const cancel = simulateSetInterval(() => {
  console.log(1)
}, 300)

setTimeout(() => {
  cancel()
}, 1000)

setInterval模拟setTimeout

计数,一次就清除。

function simulatedSetTimeout(callback, delay) {
  let timer = 0;

  timer = setInterval(function() {
    clearInterval(timer);
    callback();
 
  }, delay);
  
  return () => clearInterval(timer);
}

使用

const cancel = simulateSetTimeout(() => {
  console.log(1)
}, 1000)

setTimeout(() => {
  cancel()
}, 1100)