2015-12-14 69 views
15

即使沒有附加偵聽器,JavaScript中的事件總是被觸發嗎?即使沒有人在聽,JavaScript事件是否始終執行?

讓我們說「鼠標移動」,我移動鼠標,但在整個應用程序中沒有聽衆,瀏覽器是否還會構建一個新的事件並啓動它,還是會優化並考慮事實:如果沒有事件聽衆,只是忽略數據。

我假設每個瀏覽器的工作方式不同,我假設他們使用的模式如觀察者什麼不是,但有沒有規範說明它應該如何?

+7

這就像「樹倒在森林裏」的問題,但禁止使用麥克風... – Katana314

+0

你問關於瀏覽器事件嗎? – Amit

+0

這對於逐個瀏覽器,逐個引擎的處理方式可以完全不同。 – JAAulde

回答

6

如果您覺得這是不正確的,但根據我的理解,根據DOM Level 2 Events Spec,您可以隨意對此進行downvote,這意味着事件總是被構造和執行,但聽衆需要在那裏,當然,實際上要註冊它們。

我之所以說「有一種感覺,事件總是構建和執行」,是因爲該規格提到

此方法允許事件監聽器上的事件 目標上註冊。如果將事件監聽器添加到EventTarget,而處理事件爲 ,則不會由當前動作觸發 ,但可能會在事件流的後續階段(例如 冒泡階段)中觸發。如果多個相同的EventListener在 上註冊了相同的具有相同參數的EventTarget,則丟棄重複實例 。它們不會導致EventListener被調用兩次 ,並且因爲它們被丟棄,所以不需要使用removeEventListener方法將其刪除。

因此,如果事件偵聽器是動態添加的,則需要有一種方法讓頁面知道註冊並偵聽它們。每個瀏覽器如何處理這個可能與上面提到的@JAAulde不同,但我不認爲瀏覽器會優化事件監聽器是否存在,或者至少沒有激烈的事情。

+0

謝謝@aug!這正是我所期待的。即使瀏覽器的工作方式不同,您總會發現一條「應該是這樣的」子句。 – camou

相關問題