我想了解这段代码:
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
函数上的计时器。现在,每当事件发生时(click
,keypress
)refresh()
都会被调用。
然后最后这个函数被调用传入另一个函数和int值(5
),后者将是计时器的秒数。在稍后通过cb
表示的其他函数中,页面将被刷新(location.href = location.href;
)。
这会导致每5秒自动刷新一次。
所以现在我不明白我是否添加了其他功能:
setIdle(function() {
console.log('hi');
}, 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?