柯里化函数

101 阅读1分钟
        //函数例子
        function fn1(a, b, c, d) {
            return a + b + c + d
        }

        //柯里化函数
        function currey(f) {
            if (f.length <= 1) {
                return f;
            }
            return function (...p1) {
                return function recur(...p2) {
                    p1 = [...p1, ...p2];
                    if (p1.length >= f.length) {
                        return f(...p1)
                    }
                    return recur
                }()
            }
        }


        //检查效果
        let fn2 = currey1(fn1);
        console.log(fn2(1)(2)(3)(4));//10
        console.log(fn2(1)(2, 3)(4));//10
        console.log(fn2(1, 2, 3, 4));//10