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

柯里化(curring)的实际运用

柯里化(curring)的实际运用

BIG阳 2018-09-08 09:54:34
题目描述原文中,下列相关代码部分提现柯里化函数的 提前返回和延迟执行 两大特点,并且这样代码中只需要判断一次浏览器类型。我对于代码的理解在于,每次实际调用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 回答

?
largeQ

TA贡献2039条经验 获得超7个赞

这不是立即执行函数吗?只会在刚开始的时候运行一次,然后addEvent保存的是它的运行结果即返回的函数啊

查看完整回答
反对 回复 2018-09-09
?
森林海

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)


查看完整回答
反对 回复 2018-09-09
  • 2 回答
  • 0 关注
  • 703 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信