为了账号安全,请及时绑定邮箱和手机立即绑定

第一次立即执行setInterval函数

第一次立即执行setInterval函数

慕标5832272 2019-10-16 13:09:37
第一次立即执行setInterval函数有一种方法可以配置setInterval方法立即执行该方法,然后使用计时器执行。
查看完整描述

3 回答

?
跃然一笑

TA贡献1826条经验 获得超6个赞

最简单的方法是自己第一次直接调用函数:

foo();setInterval(foo, delay);

然而,我们有充分的理由避免setInterval-特别是在某些情况下setInterval事件可以在没有任何延迟的情况下立即到达。另一个原因是,如果要停止循环,则必须显式调用clearInterval这意味着您必须记住从原始句柄返回的句柄。setInterval打电话。

所以另一种方法是foo为后续调用触发自身setTimeout相反:

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

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

这保证了至少间隔期delay在通话之间。如果需要的话,还可以更容易地取消循环-只是不调用setTimeout当达到循环终止条件时。

更好的是,您可以将所有这些都封装在立即调用函数表达式它创建函数,然后按照上面的方式再次调用自己,并自动启动循环:

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

它定义了函数,并在一次执行中启动了循环。



查看完整回答
反对 回复 2019-10-17
?
catspeake

TA贡献1111条经验 获得超0个赞

我不确定我是否正确地理解了你,但是你可以很容易地做这样的事情:

setInterval(function hello() {
  console.log('world');
  return hello;}(), 5000);

显然有很多种方法,但这是我能想到的最简洁的方法。


查看完整回答
反对 回复 2019-10-17
?
慕桂英3389331

TA贡献2036条经验 获得超8个赞

由于同样的问题,我偶然发现了这个问题,但是如果你需要的话,所有的答案都帮不上忙。行为端正喜欢setInterval()但是随着函数在开头立即调用的差异。

以下是我对这个问题的解决方案:

function setIntervalImmediately(func, interval) {
  func();
  return setInterval(func, interval);}

这一解决方案的优点是:

  • 现有代码使用

    setInterval

    可以很容易地通过替换来适应
  • 严格模式
  • 它使用现有的命名函数和闭包。
  • 仍然可以使用返回值并将其传递给

    clearInterval()

    后来

例子:

// create 1 second interval with immediate executionvar myInterval = setIntervalImmediately( _ => {
        console.log('hello');
    }, 1000);// clear interval after 4.5 secondssetTimeout( _ => {
        clearInterval(myInterval);
    }, 4500);

如果你真的需要用setInterval然后您也可以替换原来的setInterval..因此,在现有代码之前添加此代码时不需要更改代码:

var setIntervalOrig = setInterval;setInterval = function(func, interval) {
    func();
    return setIntervalOrig(func, interval);}

尽管如此,上面列出的所有优点都适用于此,但不需要替换。



查看完整回答
反对 回复 2019-10-17
  • 3 回答
  • 0 关注
  • 553 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信