Twlig / issuesBlog

MIT License
3 stars 0 forks source link

函数柯里化 #88

Open Twlig opened 2 years ago

Twlig commented 2 years ago

什么是函数柯里化

函数柯里化(curry)是函数式编程里面的概念。curry的概念很简单:只传递给函数一部分参数来调用它,让它返回一个函数去处理剩下的参数。

柯里化有什么作用

主要有3个作用: 参数复用提前返回延迟执行

我们来简单的解释一下: 参数复用:拿上面 f这个函数举例,只要传入一个参数 z,执行,计算结果就是 1 + 2 + z 的结果,1 和 2 这两个参数就直接可以复用了。

提前返回 和 延迟执行 也很好理解,因为每次调用函数时,它只接受一部分参数,并返回一个函数(提前返回),直到(延迟执行)传递所有参数为止。

function curry(fn, ...args) {
    return args.length >= fn.length ? fn(...args) : (..._args) => curry(fn, ...args, ..._args)
}

function add(a, b, c) {
    return a+b+c
}

const addC = curry(add, 1)(2)(3)   //6

原文链接:

Twlig commented 2 years ago

变长柯里化

function dynamicAdd() {
  return [...arguments].reduce((prev, curr) => {
    return prev + curr
  }, 0)
}
function curry(fn, ...args) {
    function curried(..._args) {
        return curry(fn, ...args, ..._args)
    }
    curried.toString = function() {
        return fn(...args)
    }
    return curried
}
var add = curry(dynamicAdd);
alert(add(1)(2)(3)(4)) // 10