尝试函数柯里化

140 阅读1分钟

sum(1, 2, 3) => 6

sum(1)(2)(3)() => 6

话不多说

function foo (arr) {
  let result = null;
  for (let i = 0; i < arr.length; i++) {
    result += arr[i]
  }
  return result
}

function curry (fn, args) {
  let arr = args || [].concat(args)
  return function sum (sarg) {
    if (sarg) {
      Array.isArray(sarg) ? arr = arr.concat(sarg) : arr.push(sarg)
      return sum
    } else {
      console.log(fn.call(this, arr));
    }
  }
}

//curry(foo,[1, 2])([11, 22, 33])(1)([1, 2])() => 73