clearTimeout和clearInterval是否相同

Are clearTimeout and clearInterval the same?

本文关键字:是否 clearInterval clearTimeout      更新时间:2023-09-26

在为web应用程序编写某些Javascript时,我注意到我使用了setTimeout,但我曾尝试用clearInterval清除它,它阻止了Google Chrome和Internet Explorer 9中发生的超时。

clearTimeoutclearInterval可以互换吗?

这里有一个JSfiddle,里面有一个我正在谈论的例子。

事实上,我相信我们可以从W3C规范中得出一个相当有力的结论(http://www.w3.org/TR/html5/webappapis.html#timers)。它没有明确的保证,但我们有很多证据表明,几乎任何合理的实现都会有这种行为:

1) 超时和间隔实际上使用相同的底层功能:

setTimeout()方法必须返回计时器初始化步骤返回的值,并将方法的参数传递给它们。。。并且重复标志被设置为假。

setInterval()方法必须返回计时器返回的值初始化步骤,将方法的参数传递给它们。。。。以及repeat标志设置为true。

2) 这个单独的功能——上面提到的"计时器初始化步骤"——使用一个计时器列表:

2。。。让handle是用户代理定义的大于零的整数将在的列表中标识此调用要设置的超时活动定时器。

10、返回手柄。。。

3) clearTimeout()和clearInterval()都在该列表上操作(事实上,规范并没有以任何方式区分它们)

clearTimeout()和clearInterval()方法必须清除条目从的活动计时器列表中标识为句柄调用方法的WindowTimers对象,其中handle为传递给方法的参数(如果有的话)。(如果手柄没有在WindowTimers的活动计时器列表中标识一个条目对象,则该方法不执行任何操作。)

我相信这提供了一个相当有力的例子,根据规范,clearTimeout和clearInterval应该是同义词。事实证明,这在我测试的所有浏览器(Chrome 37、Firefox 33和Opera 25)中都有效。

不,它们不能互换。

当然,有些浏览器可能会以相同的方式共享相同的代码来清除间隔和超时,但这并不意味着它们是可互换的,而且你肯定不能保证它们在所有浏览器实现中都能正常工作。归根结底,这两种方法针对不同的目的进行了不同的定义,因此您应该将它们用于指定的用途。。否则,你就是在找麻烦。

来自Mozilla参考:

值得注意的是,setTimeout()和setInterval()是共享的,这意味着您可以在技术上使用clearTimeout()和clearInterval()可以互换。然而,对于清晰,你应该避免这样做。

即使它们现在可以作为同义词使用,在未来的任何时候都可能发生变化。你为什么不直言不讳呢