javascript 中的尾函数

Tail function in javascript

我想制作一个添加参数的函数。调用这个函数应该是

functionAdd(2)(3)(4)...(n);

结果为 2+3+4...+n 我正在尝试这个

function myfunction(num){
  var summ =+ num;
  if(num !== undefined){
    return myfunction(summ);
  }

};

但是不行,ovwerflow的错误。而且我不明白我应该从这个功能中退出什么地方;

您可以使用 .valueOf 来解决这个问题:

function myfunction(sum){
    var accum = function(val) {
        sum += val;

        return accum;
    };

    accum.valueOf = function() {
        return sum;
    };

    return accum(0);
};

var total = myfunction(1)(2)(3)(4);

console.log(total); // 10

JSFiddle:http://jsfiddle.net/vdkwhxrL/

工作原理:

在每次迭代中,您 return 对累加器函数的引用。但是当您请求结果时 - .valueOf() 被调用,return 是一个标量值。

请注意,结果仍然是一个函数。最重要的是,这意味着它不会在分配时被复制:

var copy = total
var trueCopy = +total   // explicit conversion to number

console.log(copy)       // 10 ; so far so good
console.log(typeof copy)  // function
console.log(trueCopy)   // 10
console.log(typeof trueCopy)  // number

console.log(total(5))   // 15

console.log(copy)       // 15 too!
console.log(trueCopy)   // 10

如果最后一次调用可以不带参数:

function add(value) {

  var sum = value;

  return function add(value) {
    if(typeof value === 'number') {
      sum += value
      return add
    } else {
      return sum
    }
  }

}



console.log(add(1)(2)(3)(0)()) // 6