【代码】JS将普通函数转换为柯里化函数

前言

JS将普通函数转换为柯里化函数

源代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
// 原函数
function fn(x, y, z) {}

// 柯里化转换工具函数
function curryTool(fn) {
return function currentFn(...args) {
if (args.length < fn.length) {
// 如果当前传递的参数小于最终需要的参数
return function (...currentArgs) {
// 则拼接参数并递归传递给当前函数
currentFn(...args.concat(currentArgs));
}
} else {
// 如果当前传递的参数大于等于最终需要的参数
// 则直接直接执行原函数,并传递当前函数输入的所有参数
return fn(...args);
}
}
}

// 通过柯里化工具函数将原函数转换为柯里化函数
var curryFn = curryTool(fn);

// 调用原函数
fn(1, 2, 3);
// 调用柯里化函数
curryFn(1)(2)(3);

// 调用原函数超出形参总数
fn(1, 2, 3, 4);
// 调用柯里化函数超出形参总数
curryFn(1)(2)(3)(4);

完成