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