使用setInterval()多次执行函数的最佳方法是什么? 我在这里尝试的问题是,清除Interval ...时不知道变量“timer”
...
if (counter.hasClass("superWarn")){
var timer = setInterval(toggleCharCount(), 500);
}
...
function toggleCharCount() {
if(typeof toggleCharCount.i == 'undefined'){
toggleCharCount.i = 0;
}
toggleCharCount.i++;
$('#twCharCount').toggle();
if (toggleCharCount.i>=4){
window.clearInterval(timer);
toggleCharCount.i = 0;
}
}
任何建议......
答案 0 :(得分:3)
为什么不把计时器传递给回调?
...
if (counter.hasClass("superWarn")){
var timer = setInterval(function(){toggleCharCount(timer)}, 500)
}
...
function toggleCharCount(timer) {
if(typeof toggleCharCount.i == 'undefined'){
toggleCharCount.i = 0;
}
toggleCharCount.i++;
$('#twCharCount').toggle();
if (toggleCharCount.i>=4){
window.clearInterval(timer);
toggleCharCount.i = 0;
}
}
答案 1 :(得分:1)
我看不到你完整的javascript代码,看来变量计时器似乎不在全局范围内。如果将'timer'移动到globalscope中,函数'toglleCharCount()'将获得访问权。
答案 2 :(得分:1)
function tester(asd){
alert(timer);
}
var timer = setInterval(function(timer){
tester(timer)
}, 5000);
答案 3 :(得分:0)
1)从我的测试来看,如果你把一个函数命名为变量,那就不好了:D:
var foo = {i:'my number'};
function foo(){
alert(foo.i);
}
要么将foo解释为一个对象,要么作为一个函数,要么它不能同时保存两个不同的值。
2)当您将参数作为函数调用(setTimeout(myFunction(),t)
)发送时,在定义setTimeout时执行该函数。正确的方法是发送函数,而不是函数调用,或者将要评估的字符串:
setTimeout(myFunction,t);
// or
setTimeout("myFcuntion()",t);
// or the best way :
setTimeout(function(){myFunction();},t);
3)timer
声明的范围与clearInterval
函数的范围不同,因此当您想要清除间隔时,您没有对间隔本身的任何引用,因为{{ 1}}是timer
。您应该在相同的范围内对它们进行delcare,或者您可以将undefined
视为全局(不包括timer
关键字),从而使var
在全局范围内可见,其中任何其他3d派对可以看到它。