美文网首页
函数柯里化

函数柯里化

作者: percykuang | 来源:发表于2019-11-21 20:59 被阅读0次
function add(a, b, c, d) {
  return a + b + c + d
}

function fixedParamsCurry(fn) {
  var _arg = [].slice.call(arguments, 1)
  return function() {
    var newArg = _arg.concat([].slice.call(arguments, 0))
    return fn.apply(this, newArg)
  }
}
// fn.length 代表fn的形参个数
function curry(fn, len) {
  var len = len || fn.length
  return function() {
    if (arguments.length < len) {
      var combine = [fn].concat([].slice.call(arguments, 0))
      return curry(
        fixedParamsCurry.apply(this, combine),
        len - arguments.length
      )
    } else {
      return fn.apply(this, arguments)
    }
  }
}

var newAdd = curry(add)

// 10
console.log(newAdd(1)(2)(3)(4))
// 10
console.log(newAdd(1, 2)(3)(4))
// 10
console.log(newAdd(1, 2, 3)(4))

相关文章

网友评论

      本文标题:函数柯里化

      本文链接:https://www.haomeiwen.com/subject/ytrxwctx.html