有一种方法可以将javascript的setInterval方法配置为立即执行该方法,然后使用计时器执行

推荐答案

第一次直接调用函数最简单:

foo();
setInterval(foo, delay);

然而,有充分的理由避免setInterval个事件——特别是在某些情况下,setInterval个事件的全部负载可以立即到达,而不会有任何延迟.另一个原因是,如果要停止循环,必须显式调用clearInterval,这意味着您必须记住从最初的setInterval调用返回的句柄.

因此,另一种方法是让foo自己触发后续呼叫,而不是使用setTimeout:

function foo() {
   // do stuff
   // ...

   // and schedule a repeat
   setTimeout(foo, delay);
}

// start the cycle
foo();

这保证了在呼叫之间有at least个间隔delay.如果需要,还可以更容易地取消循环-只要在达到循环终止条件时不调用setTimeout即可.

更好的是,您可以将所有这些都封装在immediately invoked function expression中,这将创建函数,然后该函数会像上面一样再次调用自身,并自动启动循环:

(function foo() {
    ...
    setTimeout(foo, delay);
})();

它定义了函数并一次启动循环.

Javascript相关问答推荐

我无法使用tailwind-css和reactJS修改图像的位置

在JavaScript中,是否有一种方法可以创建自定义thable,在等待某些代码后自动触发它?

从连接字符串创建客户端时,NodeJS连接到CosmosDB失败

有Angular 的material .未应用收件箱中的价值变化

*ngFor和@代表输入decorator 和选角闭合

使用续集和下拉栏显示模型属性

如何将连续的十六进制字符串拆分为以空间分隔的十六进制块,每个十六进制块包含32个二元组?

react—router v6:路由没有路径

Angular material 拖放堆叠的牌副,悬停时自动展开&

为什么按钮会随浮动属性一起移动?

Html文件和客户端存储的相关问题,有没有可能?

我可以使用使用node.js创建的本地主机来存储我网站上提交的所有数据吗?没有SQL或任何数据库.只有HTML语言

我可以使用空手道用户界面来获取网页的当前滚动位置吗?

使用领域Web SDK的Vite+Vue应用程序中的Web程序集(WASM)错误

JQuery Click事件不适用于动态创建的按钮

连接到游戏的玩家不会在浏览器在线游戏中呈现

Angular 形式,从DOM中删除不会删除指定索引处的内容,但会删除最后一项

使用NextJS+MongoDB+Prisma ORM获取无效请求正文,无法发布错误

如何 for each 输入动态设置输入变更值

为什么我看到的是回复,而不是我的文档?