我在面试中能够解决 addNum(4,5) 和 addNum(4)(5),但是如果 addNum(1)(2)...(N) 呢?
I was able to solve addNum(4,5) and addNum(4)(5) in interview, but what if addNum(1)(2)...(N)?
昨天我参加了JavaScript、
的面试
他们问了我一个问题,
写一个程序,
addNum(4,5);
addNum(4)(5);
我写的。如下
var fn18 = function(){
var addNum = function(){
var argLength = arguments.length,
num = 0;
if(argLength > 1){
for(var x=0;x < argLength; x++){
num += parseInt(arguments[x],10);
}
return num;
}else if(argLength == 1){
num = arguments[0];
var fn = function (param){
var n = num + param;
return n;
}
return fn;
}else{
return 0;
}
};
print("1> addNum(2,4) => "+addNum(2,4)+"\n");
print("2> addNum(2)(5) => "+addNum(2)(5)+"\n");
print("3> addNum() => "+addNum()+"\n");
};
fn18();
以上程序运行良好。
请忽略 "print" 关键字,因为我在 java.
上的 Rhino 库中 运行
所以我的问题是我应该如何解决这个问题
addNum(2)(3)(4).....(N)
我厌倦了递归返回函数,但它打印了整个函数。
我的方法应该是什么?
这个怎么样(省略第一种情况的解决方法,addNum(4,5)
):
function addNum(num) {
var fun = function(num2) {
fun.sum += num2;
return fun;
}
fun.sum = num;
return fun;
}
您可以链接任意多个,并随时调用 .sum
返回的函数并获取当前总和。
昨天我参加了JavaScript、
的面试他们问了我一个问题, 写一个程序,
addNum(4,5);
addNum(4)(5);
我写的。如下
var fn18 = function(){
var addNum = function(){
var argLength = arguments.length,
num = 0;
if(argLength > 1){
for(var x=0;x < argLength; x++){
num += parseInt(arguments[x],10);
}
return num;
}else if(argLength == 1){
num = arguments[0];
var fn = function (param){
var n = num + param;
return n;
}
return fn;
}else{
return 0;
}
};
print("1> addNum(2,4) => "+addNum(2,4)+"\n");
print("2> addNum(2)(5) => "+addNum(2)(5)+"\n");
print("3> addNum() => "+addNum()+"\n");
};
fn18();
以上程序运行良好。 请忽略 "print" 关键字,因为我在 java.
上的 Rhino 库中 运行所以我的问题是我应该如何解决这个问题
addNum(2)(3)(4).....(N)
我厌倦了递归返回函数,但它打印了整个函数。
我的方法应该是什么?
这个怎么样(省略第一种情况的解决方法,addNum(4,5)
):
function addNum(num) {
var fun = function(num2) {
fun.sum += num2;
return fun;
}
fun.sum = num;
return fun;
}
您可以链接任意多个,并随时调用 .sum
返回的函数并获取当前总和。