Javascript 函数,每次调用时都会重复setTimeout()更改

Javascript 函数,每次调用时都会重复setTimeout()更改,javascript,settimeout,Javascript,Settimeout,我正在尝试使用setTimeout()设置间隔,它在代码第一次执行时起作用。第二次(创建新间隔后),设置超时(推送到intervalTimeouts)以某种方式延迟。setTimeout之前的代码(rep--;等等)执行两次,然后setTimeout同时重复两次。第三次调用函数时,setTimeout之前的代码在超时开始之前重复三次。我尝试在函数调用自身之前消除延迟(通过将setTimeout(intervalRep,pause*1000);更改为intervalRep();),但这并不能解决问

我正在尝试使用setTimeout()设置间隔,它在代码第一次执行时起作用。第二次(创建新间隔后),设置超时(推送到intervalTimeouts)以某种方式延迟。setTimeout之前的代码(rep--;等等)执行两次,然后setTimeout同时重复两次。第三次调用函数时,setTimeout之前的代码在超时开始之前重复三次。我尝试在函数调用自身之前消除延迟(通过将setTimeout(intervalRep,pause*1000);更改为intervalRep();),但这并不能解决问题。有人知道为什么会这样吗

function intervalRep() {
  if (intervalsRunning === true) {
    rep--;
    document.body.style.background = '#FB2843';
    calcSprintSegments(sprint * 1000);
    longBeep.play();
    intervalTimeouts.push(setTimeout(function() {
        if (rep > 0) {
          document.body.style.background = '#BB39F0';
          lowBeep.play();
          setTimeout(intervalRep, pause * 1000);
        } else {
          intervalsRunning = false;
          intervalTimeouts.forEach(function(t) {
            clearTimeout(t);
          });
          intervalTimeouts = [];
          document.body.style.background = '#4A3DF9';
          cheering.play();
        }
      }, sprint * 1000)
    );
  }
}

你能告诉我你是怎么调用这个函数的吗?。这些第二次和第三次通话是如何以及何时发生的??该函数不是自包含的,因为:
rep、pause、sprint、intervalsRunning、intervalsrimeouts
会影响行为,如果您多次调用该函数,那么这两个调用都会相互影响(正如您所看到的,这是一个糟糕的设计),我理解设计不是最好的!即使所有这些都保持不变,函数的行为也不同。将以minute@RobertoLangarica该函数是从modules/interval.jsI中的countDown()调用的,它将rep、pause、sprint更改为局部变量,似乎解决了这个问题。非常感谢。仍然在想我如何修复图形,但这完全是另一个问题