func/curryFn.js

/**
 * @module func
 * @description 函数柯里化
 * @param { Function } fn 方法
 * @param { Any } agrs 参数,可选
 */

function curryFn(fn, ...arg) {
  const _this = this
  const args = Array.from(arguments).slice(1)
  // fn.length 属性指明函数的形参个数。
  const len = fn.length

  return function () {
    const _args = Array.from(arguments)
    args.push(..._args)
    if (args.length < len) {
      return curryFn.call(_this, fn, ...args)
    }

    return fn.apply(_this, args)
  }
}

export default curryFn