这段代码是循环还是递归?

var timer1 = (cb, time) => {
  (function loop() {
    cb();
    setTimeout(loop, time);
  })();
};

var timer2 = (cb, time) => {
  cb();
  setInterval(cb, time);
};
  1. timer1 这段代码是循环还是递归?
  2. timer1 和 timer2 有什么区别?
阅读 1.7k
2 个回答

递归,间接的。
区别是1会在cb抛异常时停止,2不会停止。
另一个区别是1可以改造成高精度,2则完全依赖于浏览器自身的精度

  1. 从代码上看,自己调用自己,是递归,只不过多了个时间间隔
  2. timer1timer2的区别,其实就是setTimeoutsetInterval的区别
setTimeout()方法只运行一次,也就是说当达到设定的时间后就出发运行指定的代码,运行完后就结束了,
如果还想再次执行同样的函数,可以在函数体内再次调用setTimeout(),可以达到循环调用的效果。

setInterval()是循环执行的,即每达到指定的时间间隔就执行相应的函数或者表达式,是真正的定时器。
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题