为了账号安全,请及时绑定邮箱和手机立即绑定

关于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 关注
  • 402 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号