JS算法 --函数柯里化
- 柯里化是一种函数的转换,它是指将一个函数从可调用的 f(a, b, c) 转换为可调用的 f(a)(b)(c )
- 柯里化不会调用函数。它只是对函数进行转换
- curryAdd(10)(20)(30) 输出60
- 思路:
-
-
- 执行fn,中间状态返回函数,如add(1)或add(1)(2);
-
function curry(fn: Funcion){
const fnArgsLength = fn.length
let args: any[] = []
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:number, c:number):number{
return a + b+ c
}
const curryAdd = curry(add)
curryAdd(10)(20)(30)
curryAdd(10,20)(30)