javascript中的尾部函数

时间:2015-03-31 19:17:04

标签: javascript recursion tail-recursion

我想创建一个添加参数的函数。调用此函数应该是

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

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

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

};

但它不起作用,ovwerflow的错误。而且我不明白我应该从这个功能中找到什么;

2 个答案:

答案 0 :(得分:5)

您可以使用.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/

工作原理:

在每次迭代时返回对累加器函数的引用。但是当你请求结果时 - 调用.valueOf(),它会返回一个标量值。

请注意,结果仍然是一个功能。最重要的是,这意味着它不会在作业中被复制:

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

答案 1 :(得分:0)

如果最后一次通话可以没有参数:

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