我在一次采访中遇到了这个问题。我没有得到如何解决这个问题。 问题:编写一个sum函数,它将添加2个数字,但数字可以通过以下方式传递给函数:
我可以使用闭包来解决第一个函数,事实上对于第二个函数我也可以检查参数,如果参数长度为零,我可以再次调用sum除了下一个参数。 但是如何使它通用?意味着即使你的第一个参数和最后一个参数都有' N'通话次数&那些可以是空的或参数化的,它应该返回总和。
答案 0 :(得分:3)
录制视频如何解决:
文字回答:
function sum(numberOne) {
return function innerSum(numberTwo) {
if (typeof(numberTwo) === 'number') {
return numberOne + numberTwo;
}
return innerSum;
}
}
输出:
sum(3)(4); => 7
sum(5)()()(10); => 15
基本上,您需要返回内部函数(innerSum
)直到收到值 - 然后返回number
。
您还可以为您的方法选择其他名称,例如_sum()
或addToFirstNumber()
。
答案 1 :(得分:1)
function add (n) {
var func = function (x) {
if(typeof x==="undefined"){
x=0;
}
return add (n + x);
};
func.valueOf = func.toString = function () {
return n;
};
return func;
}
console.log(+add(1)(2)(3)()()(6));

我已经回答了这个问题Here
但是根据你的问题,我修改了
function add (n) {
var func = function (x) {
if(typeof x==="undefined"){
x=0;
}
return add (n + x);
};
func.valueOf = func.toString = function () {
return n;
};
return func;
}
console.log(+add(1)(2)(3)()()(6));
运行那样的代码
console.log(+add(1)(2)(3)()()(6));
答案 2 :(得分:0)
function sum(num1) {
return function sum2(num2) {
if(num2 === undefined) {
return sum2;
}
return num1 + num2;
}
}
console.log(sum(4)()()()(3)); // -> 7
或者在ES6中:
const add = num1 => num2 => num2 === undefined ? add(num1) : num1 + num2;
console.log(add(4)()()()()()(3)); // -> 7
答案 3 :(得分:0)
您始终可以在函数中返回函数:
let a;
function sum(value) {
if (typeof value !== "number") {
return sum;
}
if (typeof a !== "number") {
a = value;
return sum;
}
let result = a + value;
a = null;
return result;
}
答案 4 :(得分:0)
这应该这样做
function sum(num1) {
if (arguments.length === 0){
return sum;
}
return function innerSum(num2) {
if (arguments.length > 0){
return num1 + num2;
}else{
return innerSum;
}
}
}
答案 5 :(得分:-1)
您可以通过多种方式执行此操作,但大多数情况下您需要命名递归。也就是说,你可以有类似的东西:
sum = start => (...args) => args.length? args[0] + start : sum(start)
但将它写成:
可能看起来更干净function sum(start) {
function out(...args) {
return args.length? start + args[0] : out
}
return out;
}