2015-10-14 32 views
2

我看到了有關setInterval()函數的正確用法的答案。據說爲什麼使用setInterval與自我調用函數更好的方法?

(function(){ 
    // do some stuff 
    setTimeout(arguments.callee, 60000); 
})(); 

保證setTimeout的下一個調用不會在前一個結束之前進行。爲什麼使用自我調用功能會發生這種情況?

+2

這種「正確的用法」實際上是不正確的,因爲'arguments.callee'由於各種原因在嚴格模式下被棄用和禁止。相反,使用命名函數。見http://stackoverflow.com/questions/103598/why-was-the-arguments-callee-caller-property-deprecated-in-javascript/235760 – tcooc

回答

5

使用立即調用的函數表達式不會發生,它使用setTimeout()而不是setInterval()這樣做。 setInterval()的機制在第一次完成之前不會真正開始下一次迭代,除非處理程序執行了類似於開始異步操作的操作。但是通過使用setTimeout來代替,可以更好地控制迭代之間的延遲。

另外它真的不應該這樣寫。相反:

(function f() { 
    // code 
    setTimeout(f, 60000); 
})(); 

使用arguments.callee是一個壞主意,當它不是絕對必要的。

相關問題