Skip to content

函数柯里化(Currying)是一种在 JavaScript 中处理函数的技术,它可以将一个接受多个参数的函数转换成一系列使用一个参数的函数。这个转换后的函数链中的每一个函数都返回下一个函数,直到最后一个函数返回最终的结果。

javascript
function curry(fn) {
    if(typeof fn !== 'function') {
        throw new Error('curry() requires a function');
    }
    
    return function curried(...args) {
        if(args.length >= fn.length) {
            return fn.apply(this, args);
        } else {
            return function(...args2) {
                return curried.apply(this, args.concat(args2));
            }
        }
    }
}

//使用
function sum(a,b,c) {
    return a+b+c;
}

const curriedSum = curry(sum);

console.log(curriedSum(1)(2)(3)) // 6
console.log(curriedSum(1,2)(3)) // 6

在这个例子中,curry 函数接受一个函数 fn 作为参数,并返回一个新的函数 curriedcurried 函数会检查是否已经提供了足够的参数来调用原始函数 fn。如果是,则直接调用 fn 并返回结果。否则,它返回一个新的函数,该函数接受剩余的参数,并将它们与已经收集的参数合并,然后递归调用 curried。这个过程会一直持续到收集到足够的参数为止。