【问题标题】:understanding an automatic page refresh in javascript了解 javascript 中的自动页面刷新
【发布时间】:2016-04-14 16:02:51
【问题描述】:

我正在尝试理解这段代码:

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 函数上的计时器。现在每次发生事件时(clickkeypressrefresh() 都会被调用。

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

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

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

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

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

【问题讨论】:

标签: javascript timeout settimeout


【解决方案1】:

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

页面每5秒刷新一次是因为回调函数重新加载页面,重新加载页面再次运行页面中的所有Javascript,所以再次调用setIdle()

但是您第二次使用 setIdle 不会重新加载页面,因此它只会记录一次 hi

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

顺便说一句,clearInterval 应该是 clearTimeout。在大多数浏览器中,它们目前是可以互换的,但不能保证。见Are clearTimeout and clearInterval the same?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-21
    • 2011-04-27
    • 2013-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-06
    相关资源
    最近更新 更多