Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.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 如何在页面加载时启动脚本,然后使用setInterval_Javascript_Jquery - Fatal编程技术网

Javascript 如何在页面加载时启动脚本,然后使用setInterval

Javascript 如何在页面加载时启动脚本,然后使用setInterval,javascript,jquery,Javascript,Jquery,我有一个函数,timer(),我想在页面加载时立即运行一次,然后每隔一秒运行一次 目前,我有以下使用setInterval的代码: $(document).ready(function() { var timer = function(){ ... } timer(); setInterval(function(){ timer(); }, 1000); }); 注意,我不想单独使用setInterval,因为这会在页面加载后产生1秒延迟 然而,我的计时器()的使用;

我有一个函数,timer(),我想在页面加载时立即运行一次,然后每隔一秒运行一次

目前,我有以下使用setInterval的代码:

$(document).ready(function() {
 var timer = function(){
    ...
}

timer();

setInterval(function(){
      timer();
}, 1000);
});
注意,我不想单独使用setInterval,因为这会在页面加载后产生1秒延迟

然而,我的计时器()的使用;似乎停止了页面上其他脚本的工作。有什么想法吗?控制台中没有错误。

我将使用
setTimeout()

$(document).ready(function() {
    var timerLoop;
    var timer = function(){
                ...
            timerLoop = setTimeout(timer, 1000);
        };
    timer();
}
请注意
timerLoop
变量,如果需要,可以使用该变量停止“间隔”(
clearTimeout(timerLoop);

它们不是真正的异步的,它们只是定时的。如果有另一个脚本正在运行,则会在上一个脚本完成后执行定时脚本

我更喜欢
setTimeout()
而不是
seInterval()
,因为后者有一个缺点:如果有另一个脚本阻止执行由
setInterval()
设置的定时调用,这些调用将被堆叠,并且当阻塞脚本完成时,所有堆叠的调用都会尽快执行。通常这是不希望出现的行为。

尝试
console.log(timer)
,您将清楚地看到它是一个数字,而不是您可以调用的函数

相反,您必须手动调用函数并设置计时器

function timer() {
    // do something
}
$(function() {
    timer();
    setInterval(timer,1000);
});
或者,您可以使用重复超时:

function timer() {
    // do something
    setTimeout(timer,1000);
}
$(timer);

谢谢,尽管在.ready函数中,这仍然可以防止加载其他脚本?执行定时脚本也会阻止其他脚本。如果在脚本中加载脚本,则加载本身是异步完成的,但在当前脚本完成之前不会执行任何操作。@Alias 51要向您展示
setInterval()
setTimeout()
的区别,请检查(使用非IE浏览器),请访问另一个选项卡一会儿,回到“一团糟”。然后在同一时间做同样的事情,你会看到不同之处。