clearInterval功能神秘地工作

时间:2017-12-01 16:36:33

标签: javascript function order-of-execution

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

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

现在,clearInterval()setInterval()函数返回的唯一ID作为参数,只有在函数完全运行后才会返回。在我的代码中发生的事情是,在我的setInterval()函数运行之前,它被清除,这是不可能的,因为setinterval()在调用其回调函数之前不会返回任何内容。

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

2 个答案:

答案 0 :(得分:1)

如果您在代码的第一行第一次调用setInterval函数,会为其返回 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-声明 - >调用 - >清除

解决方案:

一样

clearInterval内拨打setInterval

喜欢这样:

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

答案 1 :(得分:0)

  

setinterval()在调用其回调函数之前不会返回任何内容

这完全不正确。设置间隔立即返回唯一句柄,因此您甚至可以在第一次函数运行之前删除间隔。 回调函数,因此传递给setInterval的第一个参数在运行之前不会返回任何内容。但即使在运行之后,它的返回值也会更新地分配给变量hloding唯一句柄(在您的情况下为var t)。

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