函数柯理化之递归封装

Posted web半晨

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了函数柯理化之递归封装相关的知识,希望对你有一定的参考价值。

// 支持多参数传递
function progressCurrying(fn, args) {
    let that = this;
    let len = fn.length;
    let args = args || [];
    
    return function() {
        let _args = Array.prototype.slice.call(arguments);
        
        Array.prototype.push.apply(args, _args);
        
        // 如果参数个数小于最初的fn.length,则递归调用,继续收集参数
        if (_args.length < len) {
            return progressCurrying.call(that, fn, _args);
        };
        
        // 参数收集完毕,则执行 fn
        return fn.apply(this, _args);
    };
};

其实是在初步的基础上,加上了递归的调用,只要参数个数小于最初的 fn.length,就会继续执行递归。

以上是关于函数柯理化之递归封装的主要内容,如果未能解决你的问题,请参考以下文章

函数柯理化之参数复用

函数柯理化之提前确认 (惰性函数)

函数柯理化

JS高阶编程技巧--柯理化函数

scala 函数(柯理化)

柯理化函数编程思想