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

如何在javascript中同时使用函数和闭包来获得相同的结果,javascript,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; }

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

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;
   }

 }

有什么建议吗?

试着按照你的要求来使用你的功能

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

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

你可以这样使用调节:

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

您应该使用逻辑
(| |),而不是
(&&)

“酷”一行回答:

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

这不可能是真的我不明白你的问题。。你的意思是总和(5)+总和(4)也应该是9。。im混淆使用if(y的类型==“未定义”)instead@DTH我必须编写一个可以任意调用的函数,但是,这两种方法的结果应该是相同的
您可能不需要该功能
,所以您是说函数curry是javascript不必要的功能?不,创建一个可以用这两种语法调用的函数是多余的<代码>函数(5)(4)在某些扩展中更具可读性和灵活性,但拥有两个语法有什么好处呢?这将有助于根据开发人员的上下文定制现有函数。参考这个例子,我刚才说这不是问题所在?同时使用func(x,y)和func(x)(y)的条件反射是多余的,应该建议OP不要使用它。@Roberto实际上它是在接受的答案之后发布的,相差三分钟。英雄所见略同,但最好是正确的是的,稍微多一点,但在这种情况下仍然很简单。这很有趣。我同意你的评论,这种函数性对于处理一个总数是非常无用的。。。
function sum(x, y){ 
   return y != undefined? x+y : function(a){return x + a}; 
}