函数柯里化

什么是函数柯里化?

就是将一个多参数函数,转换为单一参数(原参数的第一个)的函数,并在其返回函数中传入余下参数、返回结果。

柯里化有哪些好处?

参数复用

在以下柯里化函数中,只需要第一次传入正则表达式,后面只要是检测同一正则表达式就只需调用返回的函数

复制代码
function check(reg){
    return function(str){
        return reg.test(str);
    }
}

var checknum = check(/^[0-9]+$/);
var checkStr = check(/^[a-zA-Z]+$/);
console.log(checknum('123456'));
console.log(checknum('1234sd'));
console.log(checkStr('adafd'));
console.log(checkStr('ads2'));
复制代码

提前判断

在以下代码中,提前判断浏览器是否支持addEventListener,再返回相应函数,就不用每次注册事件都进行判断

复制代码
var on = (function () {
    if (document.addEventListener) {
        return function (element, event, handler) {
            if(element && event && handler){
                element.addEventListener(event, handler, false)
            }
        };
    }else{
        return function(element, event, handler){
            if(element && event && handler){
                element.attachEvent('on' + event, handler)
            }    
        }
    }
})();
复制代码

实现bind函数、延迟执行

为函数改变this指向,并返回函数,执行函数才会执行

Function.prototype.bind = function(context){
    var _this = this;
    var args = Array.prototype.slice.call(arguments, 1);
    return function () {
        return _this.apply(context, args.concat(Array.prototype.slice.call(arguments)))
    }
}

通用封装

复制代码
function currying(fn) {
    var l = fn.length,
    args = [];
    var result = function (arg) {
        args.push(arg);
        l--;
        if (l <= 0) {
            return fn.apply(this, args);
        }else{
            return result;
        }
    }
    return result;
}
复制代码

 

posted @   ashen1999  阅读(134)  评论(0编辑  收藏  举报
努力加载评论中...
点击右上角即可分享
微信分享提示