有关闭包的一个问题

想要实现这样的一个功能fn(add,3)(4) 得到的值为7 应该怎么写呢?

阅读 2.8k
2 个回答
function add(a, b) {
  return a + b
}

function fn(op, num1) {
  return function(num2) {
    return op(num1, num2)
  }
}

fn(add, 3)(4) // 7
function fn (func) {
      var a = Array.prototype.slice.call(arguments, 1)
      return function () {
          var args = Array.prototype.slice.call(arguments)
          args = a.concat(args)
          return func.apply(this, args)
    }
 }
 
 
 function add () {
     var result = 0
     for (var a = 0, len = arguments.length; a < len; a++) {
         result += arguments[a]
     }
     return result
 }
 

哥们你找的应该是函数curry化这个概念,这个还可以加入上下文绑定,但是我这里就没有写啦,只是简单的写了一下,自己可以百度一下柯里化,或者看看js高级程序设计,里面讲的挺好的!

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题