clearTimeout和clearInterval是一样的吗?

Iva*_*van 39 javascript clearinterval

在处理Web应用程序的某些Javascript时,我注意到我曾使用过setTimeout,但我曾试图清除它,clearInterval并且它在Google Chrome和Internet Explorer 9中停止了超时.

clearTimeoutclearInterval互换?

这是一个JSfiddle,有一个我正在谈论的例子.

lem*_*ant 26

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

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

setTimeout()方法必须返回定时器初始化步骤返回的值,并将方法的参数传递给它们,并将repeat标志设置为false.

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

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

2,... let handle是一个大于零的用户代理定义的整数,它将在活动定时器列表中标识此调用设置的超时.

10,退货处理......

3)clearTimeout()和clearInterval()都在该列表上运行(实际上并没有以任何方式区分规范)

所述clearTimeout()和clearInterval()方法必须清除识别为手柄从WindowTimers的活性定时器的列表中的条目对象在其上调用的方法,其中手柄是传递给该方法的参数,如果有的话.(如果句柄未标识调用该方法的WindowTimers对象的活动计时器列表中的条目,则该方法不执行任何操作.)

我相信这提供了一个相当强烈的案例,clearTimeout和clearInterval应该根据规范同义.事实证明,这适用于我测试过的所有浏览器(Chrome 37,Firefox 33和Opera 25).

  • 我不知道它是否只是不正确的代码,但页面可见性api介绍中的第二个例子一起使用`setInterval`和`clearTimeout`:http://www.w3.org/TR/page-visibility/#introduction (8认同)

rgt*_*ree 23

不,他们不可互换.

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

  • @RoboRobok 超时和间隔共享相同的 ID 池。这意味着[您永远不会像您所描述的那样重用ID](https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/setTimeout#Syntax)。如果 setTimeout 返回一个 ID,则同一个 window/worker 对象上的 setTimeout(或再次 setInterval)将永远不会返回相同的 ID。 (2认同)

Tom*_*ger 14

来自Mozilla参考:

值得注意的是,setTimeout()和setInterval()使用的ID池是共享的,这意味着您可以在技术上交替使用clearTimeout()和clearInterval().但是,为清楚起见,您应该避免这样做.