为什么 setInterval 不清除?

Why isn't setInterval clearing?

为什么 stopInterval 不清除 mavemave 即使在调用 stopInterval().

后仍保持记录 'g'

let boy = 'bama';
let count = 1;

const name = () => {
  let stopInterval = () => {
    if (count >= 1) {
      clearInterval(mave);
    }
  }

  if (boy === 'lama') {
    stopInterval();
    var move = setInterval(() => {
      console.log('u');
    },3000);
  } else if (boy === 'bama') {
    stopInterval();
    var mave = setInterval(() => {
      console.log('g');
    },3000);
  }
};

name();

您没有提供任何条件来停止/清除该间隔。 从一开始,您要做的第一件事就是停止间歇(尚未开始)。 然后你开始间隔并且不提供任何东西来阻止它。 在 console.log("g") 的位置设置 stopIntervall 命令,在调试时您会看到差异。

setInterval when invokes will return a timerId, You have to clear that Id.

你不是在每次间隔 运行 时清除 id,你可以在你已经通过的每个 运行 回调上调用函数 stopIntervalsetInterval

let boy = "bama";
let count = 1;

const name = () => {
  let id;                          //change - create id variable on top of function
  let stopInterval = () => {
    if (count >= 1) {
      clearInterval(id);
    }
  };

  if (boy === "lama") {
    id = setInterval(() => {       //change - Assigning ID
      stopInterval();              //change - Run every time and check
      console.log("u");
    }, 3000);
  } else if (boy === "bama") {
    id = setInterval(() => {       //change - Assigning ID
      stopInterval();              //change - Run every time and check
      console.log("g");
    }, 3000);
  }
};

name();

Alternate short solution

let boy = "bama";
let count = 1;

const name = () => {
  var timerId = setInterval(() => {
    if (count++ >= 3) clearInterval(timerId);
    if (boy === "lama") console.log("u");
    else console.log("g");
  }, 3000);
};

name();

这个程序似乎少了点什么,唯一设置的间隔是

var mave = setInterval(()//etc

它将“mave”设置为仅在该 if 语句的范围内可见的局部变量,之后就没有“stopInterval”了,您只能在启动它之前调用它

首先,您需要使 mave 成为一个全局变量,或者只是将其作为参数传递给 stopInterval(但这样一来它就很清楚了,所以不妨使用它)但主要是,您实际上启动后必须停止它

尝试只制作一个按钮,在单击时清除它,或其他任何东西