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

を呼び出すとすぐに が呼び出され、すぐにコールバック関数が呼び出されますstartAnimationgetcallback.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 に答える