我们都知道,当一个完成的函数可以返回一个值。 现在考虑以下代码行
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()
函数之前运行?
答案 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
将一段代码放到堆栈的底部,因此其余代码在它之前执行。实际上,您可以在执行函数之前清除间隔。