首页 > 其他 > 详细

函数柯里化

时间:2020-04-22 21:50:28      阅读:58      评论:0      收藏:0      [点我收藏+]

什么是函数柯里化?

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

柯里化有哪些好处?

参数复用

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

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;
}

 

函数柯里化

原文:https://www.cnblogs.com/ashen1999/p/12755686.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!