retuen 函数 return 函数()

  var fn = function(a, b, c) {
      return a + b + c;
    }
    var curry = function(fn) {
      var lastarr = []
      return function currying () {
        lastarr = lastarr.concat([].slice.call(arguments))

        if (lastarr.length < fn.length) {
          console.log(currying);
          return currying   ========这里为什么只是currying不是currying() 前一种不是只是返回currying函数但没执行吗
        }
          return fn.apply(arguments, lastarr)
      }
    }
    var all = curry(fn)
    console.log(all(1)(2)(3));
阅读 2.5k
3 个回答
这里为什么只是currying不是currying() 前一种不是只是返回currying函数但没执行吗

是的,这里返回了一个函数。

所以 all=curry(fn) 是一个函数,all(1) 也是一个函数,all(1)(2) 还是一个函数。

直到 all(1)(2)(3) 才真正调用了 fn 并返回了结果。

是的。这里有个先决条件lastarr.length < fn.length,意思就是lastarr的长度小于fn的长度(3)的时候,就会返回函数,否则就会返回值了。

all(1):lastarr 中追加参数1,长度为1,不执行,返回函数
all(1):lastarr 中追加参数1,长度为2,不执行,返回函数
all(1):lastarr 中追加参数1,长度为3,执行,返回值(运行fn(1, 1, 1),返回3)
all(1):lastarr 中追加参数1,长度为4,执行,返回值(运行fn(1, 1, 1, 1),返回3)

递归,里面并没有要执行。

var all=curry(fn);// 到这句代码才调用的
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题