clearInterval 函数神秘地工作

clearInterval function working mysteriously

我们都知道当一个函数完成时可以return一个值。 现在考虑以下代码行

var t = setInterval(function() {
  console.log('hey hi hello now 2 seconds have passed down');
} ,2000);
clearInterval(t);

现在,clearInterval() 将由 setInterval() 函数编辑的唯一 ID return 作为参数,只有在函数完全 return 后才会 returned =25=]。在我的代码中发生的事情是,在我的 setInterval() 函数 运行s 之前,它被清除了,这应该是不可能的,因为 setinterval() 在它的回调函数之前不会 return 任何东西已调用。

clearInterval()函数如何能够在setinterval()函数之前运行?

如果您在代码的第一行第一次调用 setInterval 函数,它会 returns 一个 ID

这个ID与函数的调用无关,之后告诉JS去掉这个区间。所以什么都不会发生。

这些是发生的步骤:

 // Step #1 
 var t = setInterval(
    // Step #3
    function () {console.log('hey hi hello now 2 seconds have passed down');}

  , 2000);
clearInterval(t);// Step #2

所以问题是你在调用函数之前清除了间隔。但在声明之后。

Wrong!

1- 声明 -> 清除 -> 调用

Correct

1- 声明 -> 调用 -> 清除

解决方案:

setInterval 内调用 clearInterval

像这样:

var t = setInterval(function () {
    console.log('hey hi hello now 2 seconds have passed down');
    clearInterval(t);
}, 2000);

setinterval() will not return anything until its callback function has been called

这完全不是真的。立即设置间隔 return 的唯一句柄,这样您甚至可以在第一个函数 运行 之前删除间隔。 回调 函数,所以你传递给 setInterval 的第一个参数在 运行 之前不会 return 任何东西。但即使在 运行ning 之后,它的 return 值也永远不会分配回变量 hloding 唯一句柄(在你的情况下 - var t)。

setInterval 将一段代码放到堆栈底部,因此其余代码在它之前执行。实际上,您在执行函数之前清除间隔。