实现 curry 函数,把其他函数柯里化
- curry 返回一个函数fn
- 执行fn, 中间状态返回函数,如 add(1), 或者 add(1)(2)
- 最后返回执行结果,如 add(1)(2)(3)
ts
function curry(fn:Function) {
const fnArgsLen = fn.length // 传入函数的参数长度
let args:any[] = []
// ts中,独立的函数,this需要生命类型
function calc(this:any, ...newArgs:any[]) {
// 积累参数
args = [
...args,
...newArgs,
]
if (args.length < fnArgsLen) {
// 参数不够,返回函数
return calc
} else {
// 参数够了,返回执行结果
return fn.apply(this, args.slice(0, fnArgsLen))
}
}
return calc
}
function add(a: number, b: number, c: number):number {
return a + b + c
}
const curryAdd = curry(add)
const curryAdd = curry(add)
curryADD(10)(10)(10)