2016-04-25 9 views
0

mit Was ist der Unterschied zwischen:Unterschied zwischen js Funktionen von Parametern

// Example 1 sum(8,2) 
console.log(sum(8,2)); // Outputs what?? 
// Example 2 sum(8)(2) 
console.log(sum(8)(2)); // Outputs what?? 

function sum(x,y) { 
return x+y; 
} 

function sum(x) { 
    return function(y){ 
    return x+y; 
    } 

} 

Warum übereinander verwendet wird, und warum?

+0

man eine Funktion ist, und das andere gibt: Uncaught Syntaxerror: unerwartetes Token ( –

+1

__Uncaught Syntaxerror: Unerwarteter token__ Unterschied: Der Zweite wird einen Fehler erzeugen, während erste wird ausführen, wie erwartet :) – Rayon

+0

Was Sie versuchen zu tun, [Funktion Currying] (http://stackoverflow.com/questions/36314/what-is-currying) – MohamedSanaulla

Antwort

3

Was Sie tun möchten, ist Function Currying nennt diese

Versuchen:

function sum(x) { 
    return function(y) { return x + y; } 
}; 
var sumWith4 = sum(4); 
var finalVal = sumWith4(5); 
finalVal = sumWith4(8); 

Einer der Vorteile ist, dass es in der Wiederverwendung von abstrakter Funktion hilft. Zum Beispiel kann ich im obigen Beispiel sumWith4 verwenden, um 4 zu einer beliebigen Zahl hinzuzufügen, ohne die Summe (4,5) explizit aufzurufen. Das war ein sehr einfaches Beispiel. Es würde Szenarien geben, in denen ein Teil der Funktion basierend auf dem ersten Parameter und der andere Teil auf dem zweiten Parameter bewertet würde. Sie können also eine Teilfunktion erstellen, indem Sie sie mit dem ersten Parameter versehen und dann die Teilfunktion wiederholt für mehrere verschiedene zweite Parameter verwenden.

0

ich davon aus wird sein, dass Sie den Unterschied zwischen dem Aufruf von Funktionen zu stellen bedeutet, die wie erscheinen: -

  1. Funktion (x, y)
  2. Funktion (x) (y)

Dies geschieht mit der Verwendung von Closures, die ein Konzept ist, in dem eine innere Funktion die Umgebung tragen kann, in der es erstellt wurde.

var sum = function (x){ 
    return function(y) { 
    return x+y; 
    }; 
}; 

var addWith5 = sum(5); 
/* 
    This will return a function and not a value 
    addWith5 = function(y){return 5+y;}; 
*/ 
console.log(addWith5(5)); // this will return 11 
/* 
    You can also use add function directly 
*/ 
console.log(sum(5)(6)); // this will return 11 
/* 
    The function returned by sum(5), gets called with the parameter (6) 
*/ 
//Try using this, to make it more clear 
function a(x){ 
    return x; 
}(5); 
// returns 5 

EDIT entfernt "Verschlüsse ist ein JS-Konzept."

+0

Closures ist kein JS-Konzept. Es ist ein Konzept in der Funktionsprogrammierung. Und Javascript hat funktionale Programmierkonzepte wie Closures und Curry implementiert. – MohamedSanaulla

+0

Punkt notiert und bearbeitet gemacht. @MohamedSanaulla –

Verwandte Themen