js函数柯里化

function curry(fn){
    // 代码
}

function add(a,b,c){
    return a + b + c;
}

const execAdd = curry(add);

execAdd(1)(2)(3) === 6; // true
execAdd(1,2)(2) === 6; // true
execAdd(1,2,3) === 6; // true

function mulit(a,b,c,d){
    return a * b * c * d;
}
const execMulit = curry(mulit);

execMulit(1)(2)(3)(4) === 24; // true
execMulit(1, 2)(3)(4) === 24; // true
execMulit(1, 2, 3)(4) === 24; // true
execMulit(1, 2, 3, 4) === 24; // true

这是2018年七牛云前端校招春招的一道题目

function curry(fn){
    let fnLent = fn.length,
        args = [];
    return function _curry(){
        for (const arg of arguments) {
            args.push(arg)
        }
        return args.length === fnLent ? fn.apply(this,args) : _curry;
    }
}

主要解题思路是fn.length

posted @ 2018-04-14 01:49  郑闯  阅读(198)  评论(0编辑  收藏  举报