我已经为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>
答案 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();