? ? ? ? 柯里化(currying)指的是将一个多个参数的函数拆分成一系列函数,每个拆分后的函数都只接受一个参数。
function add(a,b){
return a + b
}
add(1,2)//3
?上面代码中,函数add接受两个参数a 和 b。
柯里化就是将上面的函数拆分成两个函数,每个函数都只接受一个参数。
function add(a){
return function(b){
return a + b
}
}
add(1)(2) //3
//采用箭头函数
const add = x => y => x + y
const sum = add(1)(2) //3
? ? ? ? 主要是借助闭包和函数的嵌套实现的。
????????利用柯里化的思想,把一个接收多个参数的函数改造成多个函数,我们可以把不变的参数固定下来,变动的参数抽象到外部,由用户传入。
? ? ? ? 上面的柯里化函数只能接收有限的参数,并不能通用。
const curry = (fn,...args) =>
fn.lenth <= args.lenth
? fn(...args)
: curry.bind(null,fn,...args)
curry.bind会返回新的函数,并把传入的参数传入返回的新的函数中。
虽然这里没有显式使用命名函数进行递归,但通过 bind
方法的嵌套调用,实际上达到了递归的效果。