0

有人可以向我解释为什么这个循环永远不会停止吗?

const interval2 = setInterval(() => {
    const a = "false"
    if (a == "true"){
        clearInterval(interval2)
    }
    console.log("Hello");
    a == "true"
  }, 1000);

输出:

你好

你好

你好

你好

..

据我了解 clearInterval 应该终止间隔。但它只是继续前进。

4

2 回答 2

2

在第二行中,您将“假”分配给一个常数,然后检查它是否等于“真”。您需要在间隔回调之外的另一个范围内将 a 声明为变量

let a = "false"
const interval2 = setInterval(() => {
    if (a == "true"){
        clearInterval(interval2)
    }
    console.log("Hello");
    a = "true"
  }, 1000);

同样在回调的最后一行你有奇怪的声明:a == "true"。它可能应该是a = "true"

于 2020-03-24T15:02:19.287 回答
0

发生这种情况是因为每次setInterval重复 a 都设置为“false”,因此a == "true"永远不会满足,并且此循环永远不会停止。您可以通过在外部声明变量来解决此问题。

另外,我们不能为const变量重新赋值,所以我们需要使用let

此外,要重置使用的a"true"a = "true"不是a == "true"

let a = "false"
const interval2 = setInterval(() => {
  if (a === "true") {
    clearInterval(interval2)
  }
  console.log("Hello");
  a = "true"
}, 2000);

于 2020-03-24T15:01:26.150 回答