柯里化函数
前言
柯里化函数
指的是将一个多参数的函数拆分成一系列函数,每个拆分后的函数都只接受一个参数
他的实现思想无不展现出闭包+递归的魅力
例如:
function add (a, b) {
return a + b;
}
add(1, 1) // 2
上面代码中,函数add
接受两个参数a
和b
。
柯里化就是将上面的函数拆分成两个函数,每个函数都只接受一个参数。
function add (a) {
return function (b) {
return a + b;
}
}
// 或者采用箭头函数写法
const add = x => y => x + y;
const f = add(1);
f(1) // 2
上面代码中,函数add
只接受一个参数a
,返回一个函数f
。函数f
也只接受一个参数b
柯里化函数的优势
- 可以大量的进行函数的复用,减少代码量
- 使代码看上去更优雅
- 针对函数的参数进行优化
手撕柯里化函数
let add = function (a, b, c) {
return a + b + c;
};
function MyCurrying(fn, ...items) {
if (fn.length == items.length) {
let res=fn(...items)
return res;
}
//返回一个闭包
return (...rests) => {
return MyCurrying(fn, ...items, ...rests);
};
}
let addCurry = MyCurrying(add);
console.log(
addCurry(1)(2,4), //7
addCurry(9)(10)(10) //29
);