H5W3
当前位置:H5W3 > 其他技术问题 > 正文

【Web前端问题】有关闭包的一个问题

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

回答:

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高级程序设计,里面讲的挺好的!

本文地址:H5W3 » 【Web前端问题】有关闭包的一个问题

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址