array curry

array curry

将一个方法进行curry(颗粒化), 即比如一个方法接受三个参数, 那么现在通过调用三次的方式进行实现

例如

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

//正常调用
test(1,2,3); //6

testCurry(1)(2)(3);//6

有一个方法, 比如 curry, 进行以下执行

主要实现思路是将参数一次一次通过闭包进行记录, 然后通过比较最终调用原处的方法

const testCurry = curry(test);

function curry(fn, ...arg) {
    const len = fn.length;
    if (arg.length >= len) {
        return fn.call(null, ...arg);
    }
    return function(...arg2) {
        return curry(fn, ...arg2, ...arg);
    }
}

function curryWithArgument(fn) {
    const len = fn.length;
    const arg = Array.prototype.slice.call(arguments, 1);
    if (arg.length >= len) {
        return fn.call(null, ...arg);
    }
    return function() {
        const arg2 = arguments;
        return curry(fn, ...arg2, ...arg);
    }
}

posted @ 2020-03-10 10:38  北山秋叶  阅读(123)  评论(0编辑  收藏  举报