JavaScript实现函数柯里化

91 阅读1分钟

定义


函数柯里化是指把接受多个参数的函数变换成接受部分参数的函数,并且返回接受余下的参数且返回结果的新函数的技术。

柯里化的作用


上述的定义可能有些绕,让我们看一下下面的例子。

function add(a, b, c) {
    return a + b + c
}
let addCurry = curry(add)
const res1 = addCurry(1, 2)(3)
const res2 = addCurry(1)(2)(3)
console.log(res1);   // 6
console.log(res2);   // 6

上面代码的add函数按理应该传入三个参数,当我们使用curry函数将其柯里化之后,我们可以只传入部分参数,比如只传入1、2,剩余的参数交给返回的新的函数接收。

柯里化的实现


下面利用递归来实现柯里化

function curry(fn) {
    let judge = (...args) => {
        if (args.length == fn.length) return fn(...args)
        return (...arg) => judge(...args, ...arg)
    }
    return judge
}

上面的代码简单实现了一个柯里化函数,在柯里化内部返回了一个新的函数,每次递归先看一下当前的新的函数的参数个数有没有达到原始函数的参数个数,如果达到了就直接调用原始函数,如果没有达到就再返回一个新的函数来接收剩余参数。