javascript - 了解 JavaScript 中的自动页面刷新

标签 javascript timeout settimeout

我试图理解这段代码:

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

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

关于javascript - 了解 JavaScript 中的自动页面刷新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36628310/

相关文章:

javascript - 使用 setTimeout() 在 React 中渲染一个带有超时的列表

javascript - 如何随机旋转图像javascript?

javascript - 在单选按钮选项上选择不同的 div

javascript - Cesium ScreenSpaceEventType LEFT_DOWN 触发 LEFT_CLICK

HTML 图像表上的 JavaScript

java - 为什么我在 Hackerrank 上的这段代码中因超时而被终止?我的最后一次迭代没有发生?

http - Windows Phone 在 1 分钟后超时 http 请求

javascript - 如何清除 jQuery mouseover #id 上的 setTimeout

javascript - window.addEventListener ("load",function(){});不起作用

email - 在 CakePHP 3.1 中尝试通过 Mandrill 发送电子邮件时超时