2012-06-27 78 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(); 
相关问题