Javascript clearInterval函数神秘地工作
我们都知道函数在完成时可以返回一个值。 现在考虑下面的代码行< /P>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()函数
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,您的评论中的代码与问题相关的内容究竟有什么关系?