2016-02-23 8 views
6

muszę wykonać następujące (poniżej) wywołanie funkcji, aby dać taki sam efekt w obu sytuacjach:jak uzyskać ten sam efekt przy użyciu funkcji i zamknięcie razem w javascript

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

Próbowałem następujących ale to nie działa:

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

} 

Wszelkie sugestie?

+2

to 'y == undefi ned && y == '' 'nie może być prawdziwe – Hacketo

+0

Nie dostaję twojego pytania .. Masz na myśli sumę (5) + sumę (4) również powinna wynosić 9? ..mam zdezorientowany – DTH

+1

użyj, jeśli (typeof y == "undefined") zamiast tego – DTH

Odpowiedz

4

Spróbuj curry swoją funkcję do Państwa wymagań,

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

ostrożny: Prawdopodobnie nie będzie musiał tę funkcjonalność, to po prostu zbędny.

Można używać klimatyzacji tak:

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

'Prawdopodobnie wygrałeś ' t potrzebujesz tej funkcjonalności "Więc mówisz, że funkcja currying jest niepotrzebną funkcją w javascript? –

+0

Nie, jest po prostu zbyteczne tworzenie funkcji, która może być wywoływana za pomocą obu tych składni. 'func (5) (4);' może być bardziej czytelny i elastyczny w niektórych rozszerzeniach, ale jak to jest mieć dwie składnie? –

+0

To będzie korzystne w dostosowywaniu istniejącej już funkcji w oparciu o kontekst programisty. zobacz ten przykład https://jsfiddle.net/hqjtL6xL/ –

3

Należy użyć logiczne OR (||), nie AND (& &)

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

z "cool" jedna linia odpowiedź:

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

Zamieniłbym "fajny" na "działający, ale trudny do odczytania". –

+0

Tak, trochę więcej, ale wciąż całkiem proste w tym przypadku. To zabawne. Zgadzam się z twoim komentarzem, ta funkcjonalność jest bezużyteczna w przetwarzaniu sumy ... –

Powiązane problemy