2015-04-05 75 views
3

說我添加一個load事件窗口,像這樣:我應該總是removeEventListener?

window.addEventListener("load",initialize); 

我應該然後從窗口中刪除加載事件偵聽器的事件被觸發後?它只會發射一次,但會在發生後繼續收聽嗎?

這是很簡單的事:

function initialize(event_){ 
    /* Just by adding this line. */ 
    window.removeEventListener("load",initialize); 
} 

但是,這是矯枉過正或將實際受益我的程序的性能?我只問,因爲「加載」事件只會觸發一次,所以如果它自己解決了就會有意義。我從來沒有聽說過一個自我解決的傾聽者,儘管......任何想法?

編輯此外,我並不特別關注「加載」事件,只是偵聽器繼續偵聽只觸發一次事件的一般場景。

+0

如果你不確定這個方法,爲什麼不嘗試'window.onload = initialize;'這會調用你的初始化函數,但不會作爲事件監聽器繼續。我看不到任何刪除加載事件偵聽器的原因,但我只是給出另一個選項/方法,但都會做同樣的事情。 – NewToJS 2015-04-05 15:28:55

+1

沒有理由這樣做。 (@NewToJS設置'window'的'onload'屬性只是建立事件處理程序的另一種方式。) – Pointy 2015-04-05 15:28:57

+0

@Pointy我明白,我只是分享另一種觸發它的方法,但正如你明確指出的那樣,沒有任何理由去除事件。 – NewToJS 2015-04-05 15:31:06

回答

1

我應該在事件觸發後從窗口中刪除加載事件偵聽器嗎?

我從來沒有見過這樣做,所以我不認爲真的需要它。

它只會發射一次,但會在發生後繼續收聽嗎?

它只被DOM解僱一次,是的。但它會繼續聆聽,您可以輕鬆地手動觸發load事件(有關示例,請參閱MDN)。

但是,這是矯枉過正還是會真的有利於我的計劃的表現?

通常它是矯枉過正,因爲這不會造成巨大的差異。當然,它可能會在initialize上觸發垃圾回收,這可以節省一些內存(或更多,取決於您的代碼結構),並通過將其提供給其他應用程序來提高性能,從而提高性能。

相關問題