设置超时 执行速度比分配的间隔快

SetTimeout Executing faster then assigned interval

本文关键字:分配 超时 执行 速度 设置      更新时间:2023-09-26

我已经为Settimeout分配了5000毫秒,但它在分配的时间间隔之前执行。任何机构都可以解释为什么会发生这种情况。

<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>

由于getcallback.closure()会立即执行该函数,因此您不会存储对稍后调用的函数的引用。

一旦你调用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();