javascript - Javascript 的 setInterval block 是否返回函数?

标签 javascript jquery html browser

我有一个 javascript 函数 function a() 我想每 10 秒执行一次。
我发现我可以使用 setInterval 这样我就可以做类似的事情:setInverval(a, 10000);
我的问题如下:
这是否意味着
i) 每 10 秒调用指定的函数(不管之前的执行是否正在运行/多线程方式)或
ii) 该函数被调用,当该函数完成执行时,该函数的下一次调用安排在 10 秒后?
我基本上对选项 2 感兴趣。如果选项 1 是默认情况下发生的情况,那么我如何实现选项 2?

最佳答案

基本上,setInterval 根据选项 1 运行,除了如果函数花费的时间超过间隔时间,它将不会再次触发,直到它完成并到达下一个 tick。例如,如果您的间隔为 1 秒,而您的函数需要 1.5 秒,它将在第 2 秒时运行。

如果您想要选项 2 的行为(在函数完成后运行 X 秒),请改为在函数完成时调用 setTimeout:

setTimeout(function a() {
    // your own code
    setTimeout(a, 1000);
}, 1000);

这是如何工作的,它首先等待 1 秒,然后调用传递给 setTimeout 的函数。在函数结束时,函数本身(a 是函数的名称)被传递给 setTimeout,然后等待一秒钟再次调用该函数。这一直持续到 JavaScript 执行停止或使用 clearTimeout 删除超时。

请注意,即使您使用 setInterval,由于 JavaScript 的单线程特性,该函数永远不会并发运行。

关于javascript - Javascript 的 setInterval block 是否返回函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21953468/

相关文章:

javascript - 当表中没有记录时如何提供警报?

javascript - 使用 Javascript 替换为 getElementsByClassName 不起作用

html - CSS 仅在必要时溢出

html - 如何更改 html 表格中的字体颜色?

html - 我需要在 col-sm-6 断点上居中对齐第 5 列面板

javascript - jQuery - 如果存在正文区域,则删除元素

javascript - 在页面标题中插入带有空格的播放图标 - 就像 YouTube

javascript - 如果 'text' 不包含在事件 div - 运算符中

php - Ajax 成功函数不会对响应使用react

javascript - $ 未在 JQuery 中定义