在为网络应用程序处理某些Javascript时,我注意到我使用了setTimeout
,但我曾尝试使用clearInterval
清除它,并且它已停止在Google Chrome和Internet中发生超时资源管理器9。
clearTimeout
和clearInterval
是否可以互换?
Here's a JSfiddle以我正在谈论的为例。
答案 0 :(得分:24)
实际上我相信我们可以从W3C规范(http://www.w3.org/TR/html5/webappapis.html#timers)得出一个相当有力的结论。它没有明确保证,但我们有很多证据表明几乎任何合理的实现都会产生这种行为:
1)超时和间隔实际上使用相同的基础功能:
setTimeout()方法必须返回定时器初始化步骤返回的值,并将方法的参数传递给它们,并将repeat标志设置为false。
setInterval()方法必须返回计时器返回的值 初始化步骤,传递方法的参数....和 重复标志设置为true。
2)这个单一功能 - "定时器初始化步骤"上面提到的 - 使用单个计时器列表:
2,... let handle是一个大于零的用户代理定义的整数 这将在列表中标识此调用设置的超时 活跃的计时器。
10,退货处理......
3)clearTimeout()和clearInterval()都在该列表上运行(实际上并没有以任何方式区分规范)
clearTimeout()和clearInterval()方法必须清除该条目 从活动计时器列表中识别为句柄 调用方法的WindowTimers对象,其中handle是 传递给方法的参数,如果有的话。 (如果手柄没有 识别WindowTimers的活动计时器列表中的条目 调用该方法的对象,该方法不执行任何操作。)
我相信这提供了一个相当强烈的案例,clearTimeout和clearInterval应该根据规范同义。事实证明,这适用于我测试的所有浏览器(Chrome 37,Firefox 33和Opera 25)。
答案 1 :(得分:21)
不,它们不可互换。
当然,有些浏览器可能会以相同的方式共享相同的代码以清除间隔和超时,但这并不意味着它们是可互换的并且您肯定无法保证它们的工作方式相同跨所有浏览器实现。归结为这两种方法的定义不同,因为不同的目的,因此你应该将它们用于指定的用途。否则,你只是在寻找麻烦。
答案 2 :(得分:11)
值得注意的是setTimeout()和。使用的ID池 setInterval()是共享的,这意味着您可以在技术上使用 clearTimeout()和clearInterval()可以互换。但是,对于 清晰度,你应该避免这样做。
答案 3 :(得分:0)
即使它们现在可以同义使用,它也可能在将来的任何时候发生变化。为什么你不应该直言不讳? : - )