javascript中的尾部函数

Nat*_*lia 0 javascript recursion tail-recursion

我想创建一个添加参数的函数.应该调用这个函数

functionAdd(2)(3)(4)...(n);
Run Code Online (Sandbox Code Playgroud)

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

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

};
Run Code Online (Sandbox Code Playgroud)

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

zer*_*kms 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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)