# 函数柯里化

# 什么是柯里化

  • currying,把接受多个参数的函数变换成接受一个单一参数的函数的技术

# 为什么需要柯里化

  • 参数复用,减少代码冗余

# 柯里化的实现

sum(1,2)(3)

function currying(fn, curArg) {
      return function () {
        var args = [].slice.call(arguments)
        if (curArg !== undefined) {
          args = curArg.concat(args)
        }
        if (fn.length > args.length) {
          return currying(fn, args)
        }
        return fn.apply(null, args)
      }
    }
    function sum(a, b, c) {
      console.log(a + b + c);
    }
    currying(sum)(1, 2)(2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16