簡體   English   中英

在所有瀏覽器中removeEventListener都是線程安全的嗎?

[英]Is removeEventListener thread-safe in all browsers?

一旦調用removeEventListener,是否可以安全地假定不會調用已移除的處理程序? 這是一個有點籠統的問題,因此這里有一些具體示例。

  1. 單擊一個按鈕,並將其click事件調度到執行隊列中。 在可以處理事件之前,將調用removeEventListener,從而刪除按鈕的事件處理程序。 怎么了?
  2. 調用一個函數需要3毫秒才能完成。 在此函數結束時,將調用removeEventListener,從而刪除按鈕的單擊處理程序。 在這三毫秒的時間內,單擊該按鈕。 在完成上一個函數的執行之后,將調用處理程序嗎?

在調用removeEventListener的同一函數中執行清除操作是否安全,還是必須使用setTimeout或其他一些首先確保執行隊列為空的方法來進行清除? 瀏覽器之間的行為是否有所不同?

相關文檔也將受到贊賞。 提前致謝!

只是為了讓您簡要了解JavaScript是如何運行的-它始終是線程安全的,因為它僅在單個線程上運行。

要回答您的第一個問題,如果即使在事件被分派后也刪除了事件偵聽器,則將調用該函數,因為處理程序回調函數最終會在調用堆棧中結束。 有關更多信息,我建議您閱讀: javascript / browser:事件分派何時准確發生?

要回答您的第二個問題, removeEventListener函數是同步的,因此這意味着不可能像這樣運行:

removeBrowserListener -> click -> call the event bound function

由於瀏覽器在完成刪除事件偵聽器之前一直處於阻塞狀態,因此此時沒有注冊任何點擊。 但是即使這樣,答案也不是很明顯,您應該看一下這個問題,它解決了同樣的問題,但是從綁定事件處理程序的角度出發,而不是刪除它: addEventListener是否保證是同步的?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM