如果我们当时实现不了一个功能或者算法的话,这时我觉得更重要的是去思考,去分析。
目前我无法实现这个通用的函数,但我可以实现单个的sum(1,2)和sum(1)(2)函数。
sum(1,2)
function sum(){
var a=0;
if(arguments.length>0){
for(var i=0;i<arguments.length;i++){
a+=arguments[i];
}
}
return a;
}
sum(1,2) //3
function sum(a){
return function(b){
return a+b;
}
}
sum(1)(2) //3
下面需要的就是融合成为一个函数,融合的思想就是判断,是sum(1,2)还是sum(1)(2)
function sum(a,b){
if(b){
var a=0;
if(arguments.length>0){
for(var i=0;i<arguments.length;i++){
a+=arguments[i];
}
}
return a;
}else {
return function(b){
return a+b;
}
}
}
调用函数
add(1,2) //3
add(1)(2) //3
我们发现结果都是3
尽管实现了此功能,如果是add(1)(2)(3)(4)和add(1)呢,这时我们发现并不通用,下面是一个通用的函数:
function sum(a,b){
var value = 0;
if(b){
if(arguments.length>0){
for(var i=0;i<arguments.length;i++){
value+=arguments[i];
}
}
return value;
}else {
console.log('else');
var s = function(b){
a+=b;
return s;
}
s.toString = function(){
return a;
}
return s;
}
}
sum(1,2,3); //6
sum(1)(2)(3); //6
参考文章
函数还能这样玩儿~实现类似add(1)(2)(3)的函数
学习add(1)(2)(3)
一道面试题引发的对javascript类型转换的思考