如何停止调用函数JS

Eld*_*der 1 javascript settimeout setinterval

我有两种功能,一种是通过单击开始按钮触发的

function startGame() {
  setInterval(setCellPosition, 3000);
  setTimeGame = setTimeout(startGame, 2000);
  setTime();
};
Run Code Online (Sandbox Code Playgroud)

第二个,单击重置按钮后将被调用

function resetGame() {
  scoreBox.innerHTML = "0";
  timeBox.innerHTML = "60";
  liveBox.innerHTML = "3";
  clearTimeout(setTimeGame)
};
Run Code Online (Sandbox Code Playgroud)

resetGame功能不起作用。值(得分,时间,实时)被重设,但startGame功能不会停止。如何解决?如何停止startgame功能?

kem*_*ica 5

虽然您应该重新考虑算法,因为目前拥有的算法对于启动和停止游戏有点复杂。

但是,此解决方案背后的想法是将所有超时时间间隔对象存储在数组中。发生重置时,您将遍历每个对象并将其停止。

然后重置阵列。

const sts = []; //all set timeouts and intervals

function startGame() {
  sts.push(setInterval(setCellPosition, 3000));
  sts.push(setTimeout(startGame, 2000));
  setTime();
};

function resetGame() {
  scoreBox.innerHTML = "0";
  timeBox.innerHTML = "60";
  liveBox.innerHTML = "3";
  sts.forEach(clearTimeout);
  sts.length = 0;
};
Run Code Online (Sandbox Code Playgroud)

根据MDN:

返回的timeoutID是一个正整数值,它标识通过调用setTimeout()创建的计时器。该值可以传递给clearTimeout()来取消超时。

注意setTimeout()和setInterval()共享相同的ID池,并且clearTimeout()和clearInterval()在技术上可以互换使用,可能会有所帮助。但是,为清楚起见,您应尝试始终将它们匹配,以免在维护代码时造成混淆。