函数柯里化

什么是函数柯里化?实现 sum(1)(2)(3) 返回结果是1,2,3之和
函数柯里化是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术

function sum(a) {
    return function(b) {
        return function(c) {
            return a+b+c;
        }
    }
}
console.log(sum(1)(2)(3)); // 6
引申:实现一个curry函数,将普通函数进行柯里化:
function curry(fn, args = []) {
    return function(){
        let rest = [...args, ...arguments];
        if (rest.length < fn.length) {
            return curry.call(this,fn,rest);
        }else{
            return fn.apply(this,rest);
        }
    }
}
//test
function sum(a,b,c) {
    return a+b+c;
}
let sumFn = curry(sum);
console.log(sumFn(1)(2)(3)); //6
console.log(sumFn(1)(2, 3)); //6



Function curry(fn,args){
    var args = args || [];
    return function(){
        let _args = args.concat([…argunments]);
        if(fn.length>_args.length){
            return curry.apply(this,fn,_args)
        }
        else{
            return fn.apply(this,_args)
        }
    }
}

 

posted @ 2019-07-15 08:43  前端++  阅读(4272)  评论(0编辑  收藏  举报