2016-02-23 77 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

是的,多一點,但在這種情況下仍然非常簡單。這很有趣。我同意你的評論,這個功能對於處理總和來說是無用的...... –