優點:
-
減少事件注冊,節省內存。比如,
- 在table上代理所有td的click事件。
- 在ul上代理所有li的click事件。
-
簡化了dom節點更新時,相應事件的更新。比如
- 不用在新添加的li上綁定click事件。
- 當刪除某個li時,不用移解綁上面的click事件。
缺點:
- 事件委托基於冒泡,對於不冒泡的事件不支持。
- 層級過多,冒泡過程中,可能會被某層阻止掉。
- 理論上委托會導致瀏覽器頻繁調用處理函數,雖然很可能不需要處理。所以建議就近委托,比如在table上代理td,而不是在document上代理td。
- 把所有事件都用代理就可能會出現事件誤判。比如,在document中代理了所有button的click事件,另外的人在引用改js時,可能不知道,造成單擊button觸發了兩個click事件。
