SetTimeout比指定的间隔执行得更快

时间:2012-06-27 15:42:14

标签: javascript

我已经为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>

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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();