JavaScript 函数柯里化

柯里化是函数式编程里非常重要的概念。在维基百科上是这么解释柯里化的:

在计算机科学中,柯里化(英语:Currying),又译为卡瑞化或加里化,是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// 能接受多个参数的函数
function fn(x, y, z) {
return x + y + z
}

fn(1, 2, 3)

// 转换成接受单一参数的函数,这个函数的过程就叫柯里化
function fn(x) {
retun function(y) {
return function(z) {
return x + y + z
}
}
}
fn(1)(2)(3)

// 在ES6之后我们可以用箭头函数简化柯里化
const fn1 = x => y => z => x + y + z
fn1(1)(2)(3)
  • 为什么要有柯里化?

    1. 在函数编程中,我们希望一个函数处理的问题尽可能的单一,而不是将一大堆问题让一个函数处理。

    2. 复用逻辑

      1
      2
      3
      4
      5
      6
      7
      const fn = x => y => z => {
      return x + y + z
      }

      const add2 = fn(2)
      add2(3)(4)
      add2(5)(6)

组合函数

组合函数式在 JavaScript 开发过程中一种对函数的使用技巧、模式:

  • 如果我们需要对某一个数据进行函数调用,执行两个函数 Fn1 和 Fn2 且两个函数是依次执行的。那么我们就可以使用组合式函数。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// 加法函数
function addValue(x) {
return x + 2;
}

// 乘法函数
function multiplyByThree(x) {
return 3 * x;
}

// 组合函数:先加后乘
function combinedFunction(input) {
const addedValue = addValue(input); // 调用加法函数
const result = multiplyByThree(addedValue); // 调用乘法函数
return result;
}

// 测试组合函数
console.log(combinedFunction(3)); // 输出应为 15,因为 (3 + 2) * 3 = 15
  • 这个过程就是对函数的组合,我们称之为组合函数。