我有一个函数,timer(),我希望在页面加载时立即运行一次,然后每隔一秒运行一次。
目前我使用setInterval有以下代码:
$(document).ready(function() {
var timer = function(){
...
}
timer();
setInterval(function(){
timer();
}, 1000);
});
注意,我不仅仅想单独使用setInterval,因为这会在页面加载后产生1秒延迟
但是,我使用了timer();似乎停止了页面上的其他脚本工作。有任何想法吗?控制台中没有错误。
答案 0 :(得分:2)
我改用setTimeout()
:
$(document).ready(function() {
var timerLoop;
var timer = function(){
...
timerLoop = setTimeout(timer, 1000);
};
timer();
}
注意timerLoop
变量,如果需要,可以用它来停止“间隔”(clearTimeout(timerLoop);
)。
Timeouts并非真正异步,它们只是定时的。如果还有另一个脚本在运行,则在上一个脚本完成后执行定时脚本。
我更喜欢setTimeout()
而不是seInterval()
,因为后者有一个缺点:如果有另一个脚本阻止setInterval()
设置的定时调用的执行,这些调用会堆叠,阻塞脚本完成后,所有堆叠的调用都会尽快执行。通常这是不受欢迎的行为。
答案 1 :(得分:0)
尝试console.log(timer)
,您会清楚地看到它是一个数字,而不是您可以调用的函数。
相反,您必须手动调用该函数以及设置计时器。
function timer() {
// do something
}
$(function() {
timer();
setInterval(timer,1000);
});
或者,您可以使用重复的超时:
function timer() {
// do something
setTimeout(timer,1000);
}
$(timer);