简单手写 curry 柯里化
小于 1 分钟
/**
* 手写柯里化
*/
function curry(fn: Function) {
// 获取传入函数的参数长度
const fnArrayLength = fn.length
let args: any[] = []
// 在 ts 中, 独立的函数的 this 要声明类型
function calc(this: any, ...newArgs: any[]) {
// 积累参数
args = [...args, ...newArgs]
if (args.length < fnArrayLength) {
// 参数不够, 返回函数
return calc
} else {
// 参数够了, 返回执行结果
return fn.apply(this, args.slice(0, fnArrayLength)) // 参数进行截断, 防止参数过多
}
}
return calc
}
function add(a: number, b: number, c: number): number {
return a + b + c
}
const res = curry(add)
console.info(res(1)(2)(3))
Loading...