0

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

2 回答 2

1

因为getcallback.closure()正在立即执行函数,所以您不会存储对函数的引用以供以后调用。

于 2012-06-27T15:47:36.800 回答
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();
于 2012-06-27T15:47:57.353 回答