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

Why does setTimeout and setInterval run too fast?

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

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

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

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

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

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

var looper = setInterval(looping, 10000);

试试上面的代码。

在您的示例中,您没有为 setTimeout 和 setInterval 提供回调函数,而是调用了回调函数。只需提供函数名称及其固定值

更新:函数是 JS 中第一个 class 对象。您可以将它传递给一个函数,return 来自另一个函数的函数等...因此只需使用函数名称(只是函数名称,就像任何其他变量名称一样)就可以完成这些事情。 调用函数是使用括号完成的,您错误地调用了函数,而不是将函数传递给 setTimeout

您可以完全摆脱 setTimeout,只需按如下所示进行

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

var looper = setInterval(process, 10000);  

process() 这将调用函数并且 process 将 return 函数。因此您的函数会立即被调用。

尝试

setTimeout(process,10000)

您的代码存在问题,您调用的是函数,而不是将其传递给在时间间隔后调用的函数。如果需要传递函数,只需传递函数名即可。放置括号实际上是调用函数,该函数将在您设置 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 的原因是,每个会话只会 运行 一次并且会刷新。我觉得应该够用了。