2012-06-27 76 views
0

我已將5000 ms分配給Settimeout,但它在指定的時間間隔之前執行。可以由任何正文解釋其原因。SetTimeout執行速度更快,然後指定的時間間隔

<script type="text/javascript"> 
     var getcallback = { 
      closure: function (callback, functionparam) { 
       return callback.call(functionparam); 
      } 
     } 
     var cleartimeout; 
     var startSlideShow = { 
      timerid: 5000, 
      startAnimation: function() { 
       cleartimeout = setTimeout(getcallback.closure(function() { 
        alert("this is a basic example of chaining methods"); 
        this.startAnimation(); 
       },this), this.timerid); 
      }, 
      stopAnimation:function(){ 
      } 
     } 
     startSlideShow.startAnimation(); 

    </script> 
+0

出於好奇,纔多久?它是否立即觸發? – jackwanders

+0

是的,他們正在立即執行 –

回答

1

因爲getcallback.closure()正在執行的功能向右走,你是不是存儲到函數的引用在稍後的時間打電話。

+0

我對設置超時間隔的好奇心。如果函數被立即調用爲什麼下一個函數被立即調用爲什麼間隔不被維護。我只是想知道它是如何工作的 –

1

只要您致電startAnimation,即打電話給getcallback.closure,立即調用回調函數。要正確使用setTimeout,您需要讓閉包返回一個函數,或者不要使用這種奇怪的東西,而只需使用匿名函數。

線沿線的東西:

var getcallback = { 
    closure: function (callback, functionparam) { 
     return function() { 
      callback.call(functionparam); 
     }; 
    } 
} 

... 

或者,更清潔,剛:

var cleartimeout; 
var startSlideShow = { 
    timerid: 5000, 
    startAnimation: function() { 
     cleartimeout = setTimeout(function() { 
      alert("this is a basic example of chaining methods"); 
      this.startAnimation(); 
     }, this.timerid); 
    }, 
    stopAnimation:function(){ 
    } 
} 
startSlideShow.startAnimation(); 
相關問題