理解javascript中的自动页面刷新



我正在努力理解以下代码:

function setIdle(cb, seconds) {
    var timer; 
    var interval = seconds * 1000;
    function refresh() {
            clearInterval(timer);
            timer = setTimeout(cb, interval);
    };
    $(document).on('keypress, click', refresh);
    refresh();
}
setIdle(function() {
    location.href = location.href;
}, 5);

setIdle接受两个自变量。在其函数内部,它有一个函数refresh,用于清除Timeout函数上的计时器。现在,每当事件发生时(clickkeypress),都会调用refresh()

然后最后调用这个函数,传入另一个函数和int值(5),后者稍后将是计时器的秒数。在稍后通过cb表示的另一个函数中,页面将被刷新(location.href = location.href;)。

这会导致每5秒自动刷新一次页面。

所以现在我不明白我是否添加了一个额外的功能:

setIdle(function() {
        console.log('hi');
    }, 1);

为什么第二个函数只调用一次,而不是像另一个一样每秒调用一次?

setIdle不会每5秒运行一次回调函数。它运行一次,在您调用setIdle后5秒,如果您键入或单击某个内容,超时将再次被推迟。所以它只运行一次,当你空闲5秒时。

页面每5秒刷新一次的原因是回调函数重新加载页面,并且重新加载页面会再次运行页面中的所有Javascript,从而再次调用setIdle()

但是第二次使用setIdle不会重新加载页面,所以它只记录hi一次。

如果你想每N秒重复做一件事,请使用setInterval而不是setTimeout

BTW、clearInterval应该是clearTimeout。在大多数浏览器中,它们目前是可互换的,但不能保证。请参阅clearTimeout和clearInterval是否相同?

相关内容

  • 没有找到相关文章

最新更新