返回值的函数或函数

时间:2018-12-27 16:47:23

标签: javascript

我该如何创建一个可以多次调用其结果但在停止时仍能获得其值的函数?

例如-

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

我应该如何实现add来获得它?

2 个答案:

答案 0 :(得分:3)

如果您以某种方式消耗了该值,则有可能。您需要根据用途实现自定义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))

答案 1 :(得分:0)

由于闭包的性质,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));