Javascript SetTimeout执行速度比指定的时间间隔快
我给Settimeout分配了5000毫秒,但它是在指定的时间间隔之前执行的。有人能解释为什么会发生这种情况吗Javascript SetTimeout执行速度比指定的时间间隔快,javascript,Javascript,我给Settimeout分配了5000毫秒,但它是在指定的时间间隔之前执行的。有人能解释为什么会发生这种情况吗 <script type="text/javascript"> var getcallback = { closure: function (callback, functionparam) { return callback.call(functionparam); }
<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>
var getcallback={
闭包:函数(回调、函数参数){
返回callback.call(functionparam);
}
}
var清除超时;
var startSlideShow={
timerid:5000,
startAnimation:函数(){
cleartimeout=setTimeout(getcallback.closure)(函数(){
警报(“这是链接方法的基本示例”);
这个。startAnimation();
},这个),这个;
},
停止动画:函数(){
}
}
startSlideShow.startAnimation();
因为getcallback.closure()
正在立即执行函数,所以您没有存储对函数的引用以供以后调用。只要调用startAnimation
,您就调用了getcallback.closure
,它会立即调用回调函数。要正确使用setTimeout
,您需要让closure返回函数,或者不使用这种奇怪的东西,而只使用匿名函数
大致如下:
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();
出于好奇,多久以前?它是立即触发的吗?是的,它们立即被执行。我对设置的超时间隔很好奇。如果函数立即被调用,为什么下一个函数会立即被调用,为什么没有保持间隔。我只是想知道它实际上是如何工作的