[英]Is removeEventListener thread-safe in all browsers?
一旦調用removeEventListener,是否可以安全地假定不會調用已移除的處理程序? 這是一個有點籠統的問題,因此這里有一些具體示例。
在調用removeEventListener的同一函數中執行清除操作是否安全,還是必須使用setTimeout或其他一些首先確保執行隊列為空的方法來進行清除? 瀏覽器之間的行為是否有所不同?
相關文檔也將受到贊賞。 提前致謝!
只是為了讓您簡要了解JavaScript是如何運行的-它始終是線程安全的,因為它僅在單個線程上運行。
要回答您的第一個問題,如果即使在事件被分派后也刪除了事件偵聽器,則將調用該函數,因為處理程序回調函數最終會在調用堆棧中結束。 有關更多信息,我建議您閱讀: javascript / browser:事件分派何時准確發生?
要回答您的第二個問題, removeEventListener
函數是同步的,因此這意味着不可能像這樣運行:
removeBrowserListener -> click -> call the event bound function
由於瀏覽器在完成刪除事件偵聽器之前一直處於阻塞狀態,因此此時沒有注冊任何點擊。 但是即使這樣,答案也不是很明顯,您應該看一下這個問題,它解決了同樣的問題,但是從綁定事件處理程序的角度出發,而不是刪除它: addEventListener是否保證是同步的?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.