# 函数柯里化
2 min read
Table of Contents
函数柯里化(Currying)就是将函数多个参数转换成一列单个参数的函数。
例如:
x = f(a, b, c) 变成 h = g(a) i = h(b) x = i(c)或者序列调用x = f(a)(b)(c)在 JS 简单使用
使用函数声明式
function currying(a) { return function (b) { console.log(a, b) }}
currying('a')('b')使用函数表达式
const currying = function (a) { return function (b) { console.log(a, b) }}
currying('c')('d')使用箭头函数
const currying = (a) => (b) => { console.log(a, b)}
currying('e')('f')JS 函数柯里化
柯里化函数通常由以下步骤动态创建:调用另一个函数并为它传入要柯里化的函数和必要的参数。
function add() { const args = Array.prototype.slice.call(arguments) return args.reduce(function (a, b) { return a + b })}
function currying(fn) { var args = Array.prototype.slice.call(arguments, 1) return function () { var innerArgs = Array.prototype.slice.call(arguments) var finalArgs = args.concat(innerArgs) return fn.apply(null, finalArgs) }}
const curryAdd = currying(add, 10)curryAdd(1) // 11curryAdd(2, 3) // 15curryAdd(3) // 13通过闭包将初步参数保存下来,然后获取剩下的参数进行拼接,最后执行需要 currying 的函数。这样在返回只扩展一个参数,不支持多参数调用,像 curryAdd(1)(2)(3) 这样的函数是无法执行的。
TODO
- 实现不定参数
curry(1)(2)(3)
参考链接
- 《JavaScript高级程序设计》 22.1.5
- JavaScript专题之函数柯里化
- 实现 add(1)(2)(3)
- JS中的柯里化(currying)