函数柯里化
xianghaifeng 2024-06-25 js基础
# 函数柯里化
/**
* 函数柯里化
* @param fn
* @param args
* @return {Function}
*/
function curry(fn, args = []) {
return function () {
let rest = [...args, ...arguments];
if (rest.length < fn.length) {
return curry.call(this, fn, rest);
} else {
return fn.apply(this, rest);
}
};
}
// 测试代码
function sum(a, b, c) {
return a + b + c;
}
let sumFn = curry(sum);
console.log(sumFn(1)(2)(3));
console.log(sumFn(1)(2, 3));
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23