了解javascript

时间:2016-04-14 16:02:51

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

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

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

所以现在我不明白我是否添加了其他功能:

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

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

1 个答案:

答案 0 :(得分:1)

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

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

但您第二次使用setIdle并未重新加载页面,因此只需记录hi一次。

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

BTW,clearInterval应为clearTimeout。在大多数浏览器中,它们目前可以互换,但不能保证。见Are clearTimeout and clearInterval the same?