柯里化

柯里化,可以理解为提前接收部分参数,延迟执行,不立即输出结果,而是返回一个接 受剩余参数的函数。因为这样的特性,也被称为部分计算函数。柯里化,是一个<b 逐 步接收参数的过程。

概念先不管,下面是一道 js 题目,实现一个add(a)(b)(c)>>>函数:

function currying(fn) {
    var allArgs = []

    return function next() {
        var args = [].slice.call(arguments)

        if (args.length > 0) {
            allArgs = allArgs.concat(args)
            return next
        } else {
            return fn.apply(null, allArgs)
        }
    }
}
var add = currying(function () {
    var sum = 0
    for (var i = 0; i < arguments.length; i++) {
        sum += arguments[i]
    }
    return sum
})

add(3)(4) // result 7
add(3, 4) //7
var newAdd = add(5)
newAdd(8) //13

add函数将多个值降解为单个值的模式。只传递给函数一部分参数来调用它,让它返回一 个函数去处理剩下的参数。