手写curry函数,实现函数柯里化

Posted 沿着路走到底

tags:

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

写一个 `curry` 函数,可以把其他函数转为 curry 函数

function add(a, b, c)  return a + b + c 
add(1, 2, 3) // 6

const curryAdd = curry(add)
curryAdd(1)(2)(3) // 6

分析

curry 返回的是一个函数 fn

执行 fn,中间状态返回函数,如 add(1) 或者 add(1)(2)

最后返回执行结果,如 add(1)(2)(3)

/**
 * @description curry add
 */

export function curry(fn: Function) 
    const fnArgsLength = fn.length // 传入函数的参数长度
    let args: any[] = []

    // ts 中,独立的函数,this 需要声明类型
    function calc(this: any, ...newArgs: any[]) 
        // 积累参数
        args = [
            ...args,
            ...newArgs
        ]
        if (args.length < fnArgsLength) 
            // 参数不够,返回函数
            return calc
         else 
            // 参数够了,返回执行结果
            return fn.apply(this, args.slice(0, fnArgsLength))
        
    

    return calc


function add(a: number, b: numbe

以上是关于手写curry函数,实现函数柯里化的主要内容,如果未能解决你的问题,请参考以下文章

1.前端 函数柯里化(currying)

函数柯里化

JavaScript函数的柯里化(currying)

前端进击的巨人:学会函数柯里化(curry)

函数式编程———柯里化(Currying)

js - 函数的柯里化(Currying)