目录
什么是柯里化
所谓柯里化就是把具有较多参数的函数转换成具有较少参数的函数的过程
我们来看一个例子
let sum = function(a,b,c){
return a+b+c
}
console.log(sum(1,2,3))
这个例子实现的是1+2+3,但是我们发现传入了很多个参数,那么怎么实现柯里化,让每次只传入一个参数呢?我们要用到函数返回函数的方法
let sum = function(a){
return function(b){
return function(c){
return a+b+c
}
}
}
console.log(sum(1)(2)(3))
可以看到,我们在sum函数中返回一个函数来接收第二个参数,然后再返回一个函数接收第三个参数,最后实现求和
但是,这里有一个问题,如果我们事先不知道要传入几个参数,也就不知道要写几个函数嵌套,所以,我们又有另一种实现柯里化的方式
柯里化实现
let sum = function(){
let args = Array.prototype.slice.call(arguments) //1.将传入的参数转变成数组存放在args中
let inner = function(){ //柯里化函数
args.push(...arguments) //接收后续的参数
return inner
}
//使用toString隐式转换
inner.toString = function(){ //重写toString方法,让返回内容从函数变为求和结果
return args.reduce((pre,cur)=>{
return pre+cur
})
}
return inner //2.返回柯里化函数,传入后续的参数
}
console.log(sum(1,2)(3)(4).toString())
欢迎指正