Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/426.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript SetTimeout执行速度比指定的时间间隔快_Javascript - Fatal编程技术网

Javascript SetTimeout执行速度比指定的时间间隔快

Javascript SetTimeout执行速度比指定的时间间隔快,javascript,Javascript,我给Settimeout分配了5000毫秒,但它是在指定的时间间隔之前执行的。有人能解释为什么会发生这种情况吗 <script type="text/javascript"> var getcallback = { closure: function (callback, functionparam) { return callback.call(functionparam); }

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

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();

出于好奇,多久以前?它是立即触发的吗?是的,它们立即被执行。我对设置的超时间隔很好奇。如果函数立即被调用,为什么下一个函数会立即被调用,为什么没有保持间隔。我只是想知道它实际上是如何工作的