题目描述原文中,下列相关代码部分提现柯里化函数的 提前返回和延迟执行 两大特点,并且这样代码中只需要判断一次浏览器类型。我对于代码的理解在于,每次实际调用addEvent的时候,代码会进行一次函数执行,然后if(window.addEventListener) { ... } 这个内容还会进行一次浏览器判断。感觉我的想法和作者的想法相悖了,所以我想问一下,为什么if(window.addEventListener)在实际应用中只执行一次。即使下次调用addEvent的时候,也不会进行浏览器判断题目来源及自己的思路这是我在掘金上看到的一个案例,代码在后面作者:小兴nice链接:https://juejin.im/post/5b8350...来源:掘金著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。相关代码var addEvent = (function() { if(window.addEventListener) { // 只判断一次浏览器类型 return function(el, type, fn, capture) {
el.addEventListener(type, function(e) {
fn.call(el, e);
}, capture);
}
}else { return function(ele, type, fn) {
el.attachEvent('on' + type, function(e) {
fn.call(el, e);
})
}
}
})()
2 回答
![?](http://img1.sycdn.imooc.com/545868b60001587202200220-100-100.jpg)
森林海
TA贡献2011条经验 获得超2个赞
定义addEvent的时候,并立即执行了,执行一遍后,addEvent的执行函数就确定了。你是被返回的执行函数误导了,addEvent初始化后,就和原来的函数体没有关系了。你可以换个思路,把addEvent的返回函数改成返回一个对象,就好理解多了
var obj = (function(){ console.log('init') if(window.addEventListener){ return { func:window.addEventListener } } else { return { func:window.attachEvent } } })() console.log(obj.func) console.log(obj.func) console.log(obj.func)
添加回答
举报
0/150
提交
取消