函数柯里化

205 阅读1分钟

函数柯里化: 一个函数只传部分参数调用,让其返回一个函数处理剩余参数。

    let add = x => y => z => x + y + z
    add(1)(2)(3)

    function add2(x) {
        return function (y) {
            return function (z) {
                return x + y + z
            }
        }
    }
    add2(1)(2)(3)

用途:

  1. 参数复用
  2. 对参数可单独处理逻辑
    function currying(fn) {
        function curried(...args) {
            if (args.length >= fn.length) {
                return fn.apply(this, args)
            } else {
                return function (...args2) {
                    return curried.apply(this, [...args, ...args2])
                }
            }
        }
        return curried
    }

    let foo = currying(function (x, y, z) { return x + y + z })
    foo(1, 2)(2)