柯里化(Currying)是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数

经典面试题

  1. add(1)(2)(3) = 6;
  2. add(1, 2, 3)(4) = 10;
  3. add(1)(2)(3)(4)(5) = 15;

es5写法

  1. function currying() {
  2. // 首先先将arguments中的参数指向到一个新的数组中
  3. let args = Array.prototype.slice.call(arguments)
  4. let res = function () {
  5. for (let i of arguments) { args.push(i) }
  6. return res
  7. }
  8. res.toString = function () {
  9. return args.reduce((a, b) => a + b, 0)
  10. }
  11. return res
  12. }

es6写法

  1. function currying(...args) {
  2. let res = function (...arg) {
  3. args.push(...arg)
  4. return res
  5. }
  6. res.toString = function () {
  7. return args.reduce((a, b) => a + b)
  8. }
  9. return res
  10. }