2
我看到了有關setInterval()
函數的正確用法的答案。據說爲什麼使用setInterval與自我調用函數更好的方法?
(function(){
// do some stuff
setTimeout(arguments.callee, 60000);
})();
保證setTimeout的下一個調用不會在前一個結束之前進行。爲什麼使用自我調用功能會發生這種情況?
我看到了有關setInterval()
函數的正確用法的答案。據說爲什麼使用setInterval與自我調用函數更好的方法?
(function(){
// do some stuff
setTimeout(arguments.callee, 60000);
})();
保證setTimeout的下一個調用不會在前一個結束之前進行。爲什麼使用自我調用功能會發生這種情況?
使用立即調用的函數表達式不會發生,它使用setTimeout()
而不是setInterval()
這樣做。 setInterval()
的機制在第一次完成之前不會真正開始下一次迭代,除非處理程序執行了類似於開始異步操作的操作。但是通過使用setTimeout
來代替,可以更好地控制迭代之間的延遲。
另外它真的不應該這樣寫。相反:
(function f() {
// code
setTimeout(f, 60000);
})();
使用arguments.callee
是一個壞主意,當它不是絕對必要的。
這種「正確的用法」實際上是不正確的,因爲'arguments.callee'由於各種原因在嚴格模式下被棄用和禁止。相反,使用命名函數。見http://stackoverflow.com/questions/103598/why-was-the-arguments-callee-caller-property-deprecated-in-javascript/235760 – tcooc