# 函数式编程

# 纯函数

纯函数是这样一种函数,即相同的输入,永远会得到相同的输出,而且没有任何可观察的副作用。

# 柯里化 (curry)

单一参数

参数复用、提前返回和 延迟执行

只传递给函数一部分参数来调用它,让它返回一个函数去处理剩下的参数

用途:参数复用。本质上是降低通用性,提高适用性

用闭包把参数保存起来,当参数的数量足够执行函数了,就开始执行函数

# 组合 (Compose)

将函数串联起来执行,将多个函数组合起来,一个函数的输出结果是另一个函数的输入参数

// ES6 JavaScript Compose Function
const compose = (...fns) =>
  fns.reduceRight(
    (prevFn, nextFn) => (...args) => nextFn(prevFn(...args)),
    value => value
  )