亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

關于addEventListener和attachEvent的兼容寫法疑問,求助!

關于addEventListener和attachEvent的兼容寫法疑問,求助!

www說 2018-11-14 13:13:47
第一種寫法里面的if分支只會執行一次,返回的函數里面已經不包含瀏覽器判斷了,所以相對于常規寫法,已經很棒了var addEvent = (function(){    if(window.addEventListener){        return function(elem, type, handler){             elem.addEventListener(type, handler, false);         };     }else if(window.attachEvent){        return function(elem, type, handler){             elem.attachEvent('on' + type, handler)         };     } })();第二種寫法在第一次進入if判斷后,重寫了addEvent函數,這樣后續的addEvent也不包含分支判斷語句了,感覺跟第一種寫法并沒有多大的區別, 但是第二種寫法被稱為惰性載入函數,可是我并沒有感覺他比第一種方式惰在哪里啊?相較來說,我更喜歡第一種方式,求解釋var addEvent = function(elem, type, handler){    if(window.addEventListener){         addEvent = function(elem, type, handler){             elem.addEventListener(type, handler, false);         };     }else if(window.attachEvent){         addEvent = function(elem, type, handler){             elem.attachEvent('on' + type, handler);         };     }     addEvent(elem, type, handler); };說的很清楚,謝謝!
查看完整描述

1 回答

?
FFIVE

TA貢獻1797條經驗 獲得超6個贊

注意第一種寫法的IIFE,這樣當代碼執行到這個addEvent函數賦值的時候就明確了addEvent到底是if返回的函數還是else if返回的函數。

第二種寫法在執行代碼的時候addEvent還是最外層那個函數,你實際調用addEvent()的時候,內部進行重新賦值,明確addEvent到底是什么,然后函數內再自我調用,這就是惰性的地方吧。

注意這中間參數有個傳遞的過程,并且如果不調用的話,外層函數的引用會一直保存在addEvent上面,而第一種寫法的立即執行函數執行完之后,那個匿名函數占用的內存就已經開始等待回收了。


查看完整回答
反對 回復 2018-12-10
  • 1 回答
  • 0 關注
  • 390 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號