js实现函数柯里化

30 阅读1分钟

1、什么是柯里化,举个例子,

function fn(a,b,c,d,e){
    return a+b+c+d+e
}

如果每次传入的a,b,c的参数都相同的话,则会不停的重复这些步骤

函数柯里化则会固定好fn(a)(b)(c),之后只需传入d、e的参数就行

具体实现:

function curry(fn) {

    let length = fn.length;//拿到fn函数的形参数量
    return function foo() {
        //拿到传入的实参并转化为数组
        let args = Array.prototype.slice.call(arguments);
        let len = args.length;
        //如果传入的参数大于函数所需的形参,则直接执行fn并将所有参数传入
        if (len >= length) {
            return fn(...args)
        }
        //如果传入的参数不够,则继续收集传入的实参
        return function () {
            let innerArgs = Array.prototype.slice.call(arguments);
            let allArgs = [...args, ...innerArgs];
            let temp = foo(...allArgs);
            return temp
        }
    }

}