我想创建一个添加参数的函数。调用此函数应该是
functionAdd(2)(3)(4)...(n);
结果2 + 3 + 4 ... + n 我正在尝试这个
function myfunction(num){
var summ =+ num;
if(num !== undefined){
return myfunction(summ);
}
};
但它不起作用,ovwerflow的错误。而且我不明白我应该从这个功能中找到什么;
答案 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