文享日志

函数柯里化代码实例

JavaScript

发表于2017年08月02日13:33:22

0条评论 146次阅读


常规写法: 

var addEvent = function(el, type, fn, capture) {
        if (window.addEventListener) {
                el.addEventListener(type, function(e) {
                    fn.call(el, e);
                }, capture);
        } else if (window.attachEvent) {
                el.attachEvent("on" + type, function(e) {
                    fn.call(el, e);
        });
    }
};


柯里化后:

var addEvent = (function(){
        if (window.addEventListener) {
                return function(el, sType, fn, capture) {
                                el.addEventListener(sType, function(e) {
                                        fn.call(el, e);
                                }, (capture));
                };
        } else if (window.attachEvent) {
                return function(el, sType, fn, capture) {
                                el.attachEvent("on" + sType, function(e) {
                                        fn.call(el, e);
                });
        };
}
})();


函数柯里化好处:

  1. 动态创建函数。如上例所示,addEvent是一个立即执行函数,执行后返回对应函数,addEvent函数被新函数覆盖。伺候浏览器调用该函数是调用修改后的新函数。
  2. 延迟计算。在上篇文章《一个函数》中,实例代码很好的诠释了延迟计算,当add(1,2,3)(1)(2)(3)(4,5,6)(7,8)()调用到最后的函数时,函数无参,此时才累加所有的参数(此前将所有参数保存在父函数定义的数组中),返回求和结果。
  3. 参数复用。
👍 0  👎 0
共有0条评论

发表新评论

提交

广告展示

腾讯云推广 阿里云推广