0%

javascript-currying

Introduction

柯里化(Currying)是一种函数式编程的技术,它是将一个接受多个参数的函数转换为一系列只接受一个参数的函数的过程。这些只接受一个参数的函数被称为柯里化函数。

下面是一个Currying实现的例子,需要好生领悟。

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
33
34
// 使用rest parameters
function curry(func) {
return function curried(...args) {
if (args.length >= func.length) {
return func.apply(this, args);
}
return function (...args2) {
return curried.apply(this, [...args, ...args2]);
};
};
}

// 使用arguments,此方案仅供参考,优先使用上面的rest parameters方案。
function curry1(func) {
return function curried() {
if (arguments.length >= func.length) {
return func.apply(this, arguments);
}
const oldArguments = arguments;
return function () {
return curried.apply(this, [...oldArguments, ...arguments]);
};
};
}

function sum(a, b, c) {
return a + b + c;
}

const currySum = curry(sum);
console.log(currySum(1)(2)(3)); // 6
console.log(currySum(1, 2)(3)); // 6
console.log(currySum(1)(2, 3)); // 6
console.log(currySum(1, 2, 3)); // 6