为什么使用setInterval和自调用函数更好的方法?

Bru*_*que 2 javascript

我看到了关于setInterval()函数正确用法的答案.有人说

(function(){
   // do some stuff
   setTimeout(arguments.callee, 60000);
})();
Run Code Online (Sandbox Code Playgroud)

保证来自setTimeout的下一个调用不会在前一个调用结束之前进行.为什么使用自调用函数会使这种情况发生?

Poi*_*nty 5

使用立即调用的函数表达式并不会使它发生,而是使用setTimeout()而不是setInterval()它.setInterval()除非处理程序执行类似于开始异步操作的操作,否则在第一次迭代完成之前,机制不会真正启动下一次迭代.但通过使用setTimeout,可以更好地控制迭代之间的延迟.

它也不应该这样写.代替:

(function f() {
  // code
  setTimeout(f, 60000);
})();
Run Code Online (Sandbox Code Playgroud)

arguments.callee当它不是绝对必要时,使用是一个坏主意.