如何通过在javascript中一起使用函数和闭包来获得相同的结果

时间:2016-02-23 12:59:45

标签: javascript

我需要进行以下(下面)函数调用,以在两种情况下给出相同的结果:

sum(5,4);   // 9
sum(5)(4);   // this should also print 9

我尝试了以下但是它不起作用:

function sum(x,y){

   var a = x;
   var b = y;

   if (y == undefined && y == ''){
   return function (a,b){
      return a +b;
      }
   }
   else {
     return a +b;
   }

 }

有什么建议吗?

4 个答案:

答案 0 :(得分:4)

根据您的要求尝试curry您的功能,

function sum(x,y){
  if(y === undefined){
    return function(y){ return x+y; }
  } else { 
      return x + y; 
  }
}

sum(5,4);   // 9
sum(5)(4);  // 9

答案 1 :(得分:3)

你应该使用逻辑OR(||),而不是AND(&&)

function sum(x,y){
   if (y == undefined || y == ''){
      return function (y){
        return x + y;
      }
   }
   else {
     return x + y;
   }
}

答案 2 :(得分:3)

"酷"一行答案:

function sum(x, y){ 
   return y != undefined? x+y : function(a){return x + a}; 
}

答案 3 :(得分:2)

小心:您可能不会需要该功能,这只是多余的。

你可以像这样使用条件:

function sum( x , y ){
  if(y == undefined){
    return function( y ){
      return x + y;
    };
  }
  else{
    return x + y;
  }
}