代码之家  ›  专栏  ›  技术社区  ›  URL87

返回值的函数或函数[关闭]

  •  1
  • URL87  · 技术社区  · 6 年前

    我怎样才能创建一个函数,我可以多次调用它的结果,但当我停止时仍然得到它的值?

    例如:

    add(2)(3) // 5
    add(2)(3)(6) // 11
    

    我应该如何实现 add 得到它?

    2 回复  |  直到 6 年前
        1
  •  3
  •   Yury Tarabanko    6 年前

    如果你以某种方式消费了价值,这是可能的。你需要实现自定义 valueOf 和/或 toString 方法取决于用法。

    但要记住,这个值仍然是一个函数。如果你这样做了 typeof add(1) 你会得到 "function"

    const add = value => {
      const next = sum => add(value + sum)
      
      next.valueOf = next.toString = function() {
        return value;
      }
     
      
      return next
    }
    
    console.log(add(1), add(1)(2), add(1)(2)(3))
    
    console.log(typeof add(1)(2))
        2
  •  0
  •   Tom O.    6 年前

    由于闭包的性质,JavaScript可以这样做。从上一个函数调用中返回一个函数。像这样:

    //add(2)(3) // 5
    //add(2)(3)(6) // 11
    
    function add2(a) {
      var i = a;
      return function(b) {
        i += b;
        return i;
      };
    }
    
    function add3(a) {
      var i = a;
      return function(b) {
        i += b;
        return function(c) {
          i += c;
          return i;
        }
      };
    }
    
    console.log(add2(2)(3));
    console.log(add3(2)(3)(6));