函数科里化
把一个需要传入多个参数的函数,变成多个嵌套只需传入一个参数的函数,并且返回接受余下参数而且返回结果的新参数
- 用于创建已经设置好了一个或多个参数的函数
- 科里化和函数绑定类似:使用一个闭包返回一个函数
- 只传递给函数一部分参数来调用它,让它返回一个函数去处理剩下的参数
- 基本思想:调用另一个函数,并为它传入科里化的函数和必要参数
具体实现
1 | const curry = (fn, ...arg) => { |
最简单方法
1 | function curry(fn){ |
使用场景
- 参数服用
- 减少重复传递不变的部分参数(固定易变元素)
- 延迟执行
- 提高适用性
- 参数复用
1 | // 正常正则验证字符串 reg.test(txt) |
- 实现一个sum
1 | // 实现一个add方法,使计算结果能够满足如下预期: |
过程
普通返回函数
1
2
3
4
5
6
7
8
9
10
11function add(a, b) {
return a + b;
}
// 函数只能传一个参数时候实现加法
function curry(a) {
return function (b) {
return a + b;
}
}
curry(2)(3)不定参
1
2
3
4
5
6
7
8
9const curry = (fn, ...arg) => {
let all = arg;
return (...rest) => {
all.push(...rest);
return fn.apply(null, all);
}
}
curry(add, 2)(8)
curry(add)(2, 8)给函数执行绑定执行环境也很简单,可以多传入个参数
1 | const curry = (fn, constext, ...arg) => { |
- 判断参数是否已经达到预期的值(函数柯里化之前的参数个数),如果没有继续返回函数,达到了就执行函数然后返回值
1 | const curry = (fn, ...arg) => { |
- 至于在什么时候执行返回值,控制权在我们,设置的传入参数为空时候触发函数执行返回值(具体实现)
1 | const curry = (fn, ...arg) => { |