2014-01-17 78 views
3

說我已經通過創建一個定時器:關閉瀏覽器選項卡時,JavaScript定時器是否立即清理?

setTimeout()

(或我使用setInterval()

雖然該計時器滴答下來,到期前,我決定關閉瀏覽器選項卡該代碼正在執行中。瀏覽器是否自動清理該時間點的定時器(考慮到我根本沒有調用clearTimeout())?

我想知道是否有代碼在內存中逗留的可能性足夠長,以至於當達到超時值時,它仍然可以執行代碼。或者關閉選項卡是否意味着定時器從內存中被擦除,因此在setTimeout()中調用的函數將不會執行。

+0

我建議它根據瀏覽而變化,但例如使用Chrome標籤本質上是一個過程;當關閉時,將從內存中移除。至於其他瀏覽器,我無法看到將它保存在內存中的好處,但我無法確定。 – RichieAHB

+0

與其關聯的瀏覽器窗口關閉後,將不會執行超時:「清理」(如在GC中所做的那樣)看起來不像是一個實際問題,它本身就是一個實現細節。 – user2864740

+0

@richieahb是的,我想這可能是不同的瀏覽器。儘管你對Chrome的評價很有道理。 user2864740爲此歡呼。你碰巧有一個鏈接到我可以參考的地方看看嗎?我需要把這個問題的細節傳遞給一些同事。 –

回答

3

setIntervalsetTimeout是全局上下文(通過window對象)方法。然後關閉選項卡或窗口,所有上下文將被刪除。然後你打開新的選項卡/窗口將創建所有的上下文。

1

setInterval()方法將繼續調用該函數,直到調用clearInterval(),或窗口關閉。 setTimeout()也一樣。關閉後3秒鐘後,您可以打開窗口。點擊並關閉。你會看到那個窗口不會彈出。

See This

1

兩者的setInterval()和setTimeout的()是內置調度的瀏覽器。這允許在給定的時間段之後設置執行函數調用。

SetTimeout()可以通過clearTimeout()方法或在瀏覽器窗口關閉時取消。

SetInterval()方法與setTimeout具有相同的功能。哪些可以通過clearInterval調用來停止。

setTimeout/setInterval中使用的函數也在內部被引用,並被追蹤直到完成,然後被清理。

相關問題