Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript clearInterval函数神秘地工作_Javascript_Function_Order Of Execution - Fatal编程技术网

Javascript clearInterval函数神秘地工作

Javascript clearInterval函数神秘地工作,javascript,function,order-of-execution,Javascript,Function,Order Of Execution,我们都知道函数在完成时可以返回一个值。 现在考虑下面的代码行< /P> var t = setInterval(function() { console.log('hey hi hello now 2 seconds have passed down'); } ,2000); clearInterval(t); 现在,clearInterval()将setInterval()函数返回的唯一id作为参数,只有在函数完全运行后才会返回。在我的代码中发生的是,在我的setInterval()函数

我们都知道函数在完成时可以返回一个值。 现在考虑下面的代码行< /P>
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()
函数之前运行?

如果您在代码的第一行第一次调用
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
因此,问题是在调用函数之前清除了间隔。但是在声明之后

错了

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

正确

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

作为解决方案:

调用
clearInterval
内部
setInterval

像这样:

var t=setInterval(函数(){
log('hey hi hello now 2秒已经过去了');
净间隔(t);
}, 2000);
setinterval()
在调用其回调函数之前不会返回任何内容

那完全不是真的。Set interval立即返回唯一句柄,所以您甚至可以在第一次运行函数之前删除interval。回调函数,因此传递给
setInterval
的第一个参数在运行之前不会返回任何内容。但即使在运行之后,它的返回值也不会被分配回变量hloding unique handle(在您的例子中是-
var t


setInterval
将一段代码放在堆栈的底部,因此剩余的代码在它之前执行。实际上,在执行函数之前清除interval。

“因为setinterval()在其回调函数被调用之前不会返回任何内容。”您怎么会这么想?setinterval()函数只有在回调函数执行一次后才会完成,这是我的假设。我知道这一点,我只想知道clearInterval()函数在setInterval()函数之前是如何执行的,因为它只有在setInterval()函数返回一个值时才会运行。@HARSHBAJPAI检查我答案的新版本,请问@HARSHBAJPAI,您的评论中的代码与问题相关的内容究竟有什么关系?