2016-02-23 98 views
6

使用功能和关闭一起相同的结果,我需要做以下(下同)函数调用给出相同的结果在这两种情况下:如何获得通过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; 
    } 

} 

有什么建议吗?

+2

this'y == undefi ned && y =='''不能为真 – Hacketo

+0

我没有得到你的问题..你的意思是sum(5)+ sum(4)也应该是9? ..我很困惑 – DTH

+1

使用if(typeof y ==“undefined”)而不是 – DTH

回答

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 
2

小心:你可能不需要这些功能,这简直是多余的。

您可以使用空调这样的:

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

'你可能赢了' t需要那个功能'所以你说功能咖啡是一个不必要的功能与JavaScript? –

+0

不,创建一个可以用这两种语法调用的函数只是多余的。 'func(5)(4);'在一些扩展中可以更具可读性和灵活性,但是有两种语法有什么好处? –

+0

这对基于开发人员上下文定制已有函数将会有所帮助。参考这个例子https://jsfiddle.net/hqjtL6xL/ –

3

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

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

“酷” 一行答案:

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

我会用“工作,但很难读”取代“酷”。 –

+0

是的,多一点,但在这种情况下仍然非常简单。这很有趣。我同意你的评论,这个功能对于处理总和来说是无用的...... –