这个问题可能是微不足道的,但我对我应该做的事情感到困惑。
基本上,我注意到我呼叫的每个连续超时都有一个更大的ID号。我确信这只是为了减少ID冲突,但我担心即使超时已经执行,它仍然存在于内存中。
如果执行了超时功能,您是否需要调用任何内容来“删除”它?在我的代码中,我正在这样做:
clearTimeout(time);// destroy previous timer?
time = setTimeout( function(){ hitup( towards );}, ms);// next execution
答案 0 :(得分:6)
Javascript引擎如何实现timerID值存储完全取决于实现。它们可能使用某种映射或散列表,因为这是像这样的稀疏(非顺序)值的经典存储机制。
之前触发或清除的计时器仍不会处于活动状态或使用内存。您无需调用任何内容来删除计时器。
您展示的代码:
clearTimeout(time);// destroy previous timer?
time = setTimeout( function(){ hitup( towards );}, ms);// next execution
有时仍然有用。如果您还不知道变量time
中的计时器存储是否已经实际触发并且您不想再触发它并且您将要覆盖存储其ID的变量,那么它有时会在这种情况下调用clearTimeout()
是有意义的。如果你知道计时器已经被解雇或者你想要它被激活,那么就不需要在它上面调用clearTimeout()
。
系统将在此处理内存管理。这不是你必须担心的事情。如果计时器尚未解雇且您不希望计时器在预定时间点火,您只需担心停止计时器。
答案 1 :(得分:1)
通常如果超时功能被执行,它和它的关闭将被删除。 TimeoutID自动增量仅用于避免冲突。
但是在某些情况下,如果超时函数使用了其他函数,则可以存在超时函数的关闭 - 例如,如果您创建另一个超时函数或事件处理程序,或者只是引用全局对象。
您不需要调用任何特殊删除功能。
答案 2 :(得分:0)
如果您没有将time
变量用于任何事情,请不要将超时分配给变量。
如果你没有将setTimeout分配给变量,你可以无限期地使用定时器而不会浪费内存,前提是它们已经过期。例如许多超时很长时间会使用内存,直到它们过期。