clearTimeout
和 clearInterval
是否可以互换使用?
这里有一个JSfiddle的例子,展示了我在谈论什么。clearTimeout
和 clearInterval
是否可以互换使用?
这里有一个JSfiddle的例子,展示了我在谈论什么。实际上,我相信我们可以从W3C规范(http://www.w3.org/TR/html5/webappapis.html#timers)中得出一个相当强的结论。虽然没有明确保证,但我们有很多证据表明几乎任何合理的实现都会具有以下行为:
1) 超时和间隔实际上使用相同的基础功能:
setTimeout()方法必须返回计时器初始化步骤返回的值,传递它们的方法参数...和重复标志设置为false。
setInterval()方法必须返回计时器初始化步骤返回的值,传递它们的方法参数....和重复标志设置为true。
2) 这个单一功能-上述提到的“计时器初始化步骤”-使用单一计时器列表:
2,...让句柄成为大于零的用户代理定义的整数,用于在当前活动计时器列表中标识此调用设置的超时。
10,返回handle...
3) clearTimeout()和clearInterval()都在该列表上操作(事实上,在规范中没有以任何方式区分它们)
clearTimeout()和clearInterval()方法必须从调用该方法的WindowTimers对象的活动计时器列表中清除标识为handle的条目,其中handle是传递给方法的参数(如果有)。 (如果句柄没有标识调用该方法的WindowTimers对象的活动计时器列表中的条目,则该方法不执行任何操作。)
我相信这提供了一个相当有力的理由,即根据规范,clearTimeout和clearInterval应该是同义词。事实上,在我测试的所有浏览器中都可以工作(Chrome 37、Firefox 33和Opera 25)。
不,它们不能互换使用。
当然,一些浏览器可能会使用相同的代码来清除计时器和定时器,但这并不意味着它们是“可互换的”,您绝对不能保证它们在所有浏览器实现中都能工作得一样。这两种方法被定义为不同的目的,因此您应该按照其指定的用途使用它们。否则,您只是自找麻烦。
来自Mozilla参考文档:
值得注意的是,setTimeout()和setInterval()使用的ID池是共享的,这意味着你在技术上可以使用clearTimeout()和clearInterval()相互替换。但是,为了更清晰明了,应避免这样做。
即使它们现在可以互换使用,但未来随时可能会改变。为什么不直接称呼事物的真实名称呢?:-)