clearInterval(slip.timer);
slip.timer = setInterval(function () { mv(target, direction); }, 15);
我怀疑首先我们需要使用setInterval设置计时器,然后使用clearInterval清除它。这就是我们如何在初始化之前使用slip.timer? 谁能帮我? 我们在哪些应用程序中编码?
答案 0 :(得分:4)
只要在代码运行时初始化slip
,就可以了。如果clearInterval
未设置,则调用undefined
的值不是有效的时间间隔ID(例如null
或slip.timer
)是根据the spec定义的行为:
clearTimeout()和clearInterval()方法必须清除该条目 从活动计时器列表中识别为句柄 调用方法的WindowTimers对象,如果有的话,在哪里 handle是传递给方法的参数。 (如果句柄没有 识别WindowTimers的活动计时器列表中的条目 调用该方法的对象,该方法不执行任何操作。)
(强调我的)
这是一种相当常见的方法,可以多次触发计时器,以确保您没有多个间隔计时器副本调用您的回调 - 如果有可能会发生,您要确保清除在开始新的间隔之前的前一个间隔。
答案 1 :(得分:0)
如果多次使用这些计时器,则在开始新的setTimeout
或setInterval
之前清除它是有用的。
考虑这个例子:你有一个从0开始的秒表。你启动它并且数字增加。现在您想要重置秒表并使其仍然运行(例如,注意完成一圈的时间)。您可以使用单个函数执行以下操作来完成此操作:
setInterval
如果您运行此功能两次 - 我即一个初始启动然后重置 - 将设置 两个 间隔计时器,而不是一个。因此,秒表将 运行两倍 。这是不希望的行为,因此该功能应该执行以下步骤:
clearInterval
停止当前间隔计时器
setInterval
正如James Thorpe指出的那样,传递给undefined
的{{1}}或null
引用不是什么大问题。
如果你想在清除某些内容之前保持安全,那么你可以简单地初衷一下:
clearInterval
或者您可以测试是否存在某些内容:
var slip = {
timer: 0
};
// … Later:
clearInterval(slip.timer);
或者,如果您的代码位于闭包中,并且if(window.slip && slip.timer){
clearInterval(slip.timer);
}
未在全局定义:
slip