为什么setTimeout和setInterval运行得太快?

时间:2016-01-25 07:44:23

标签: javascript greasemonkey

function process(){
  window.location.reload(false);
}

function looping(){
  setTimeout(process(), 10000);
}

var looper = setInterval(looping(), 10000);

我正在尝试每10秒重新加载一个页面,但上面的代码会过于频繁地重新加载页面。为什么呢?

3 个答案:

答案 0 :(得分:3)

function process(){
  window.location.reload(false);
}

function looping(){
  setTimeout(process, 10000);
}

var looper = setInterval(looping, 10000);

尝试上面的代码。

在您的示例中,您只是调用回调函数,而不是向setTimeout和setInterval提供回调函数。只提供函数名称及其固定的

更新:函数是JS中的第一类对象。你可以将它传递给一个函数,从另一个函数返回一个函数等...所以这些事情都是通过使用函数名称(只是函数名,就像任何其他变量名)来完成的。 使用括号调用函数,您错误地调用了函数,而不是将函数传递给setTimeout

你可以完全摆脱setTimeout,只需按照下面的说明进行操作

function process(){
      window.location.reload(false);
}       

var looper = setInterval(process, 10000);  

答案 1 :(得分:1)

您的代码存在的问题是,您正在调用该函数,而不是在时间间隔之后传递它以进行调用。如果需要传递函数,只需传递函数的名称即可。放括号实际上是调用函数,它会在你设置setInterval时立即发生

如果您想每10秒重新加载一次页面,可以稍微简化一下。在这种情况下,我没有看到为什么你应该有setInterval的原因。我认为这已经足够了,应该可行

// After 10s, run the function
setTimeout(function() { window.location.reload(false)},10000)

在所有DOM准备就绪后,您可能希望计算10秒。

var fn = function() { 
  setTimeout(function() { window.location.reload(false)},10000);
}

// Note that, I pass the function name instead of invoking it with fn()
document.addEventListener('DOMContentLoaded', fn)

我使用setTimeout而不是setInterval的原因是,每个会话只运行一次并刷新。我认为这应该足够了。

答案 2 :(得分:0)

process()这将调用函数,process将返回函数。因此,您的函数会立即调用。

setTimeout(process,10000)