2017-11-19 2 views
0

am compose Funktion Suchen (aus Redux)Composing Funktionen mit mehreren Pfeil Funktionen

function compose(...funcs) { 
    if (funcs.length === 0) { 
     return arg => arg 
    } 

    if (funcs.length === 1) { 
     return funcs[0] 
    } 

    return funcs.reduce((a, b) => (...args) => a(b(...args))) 
    } 

const double = x => x * 2 
const square = x => x * x 
const double1 = x => x * 3 
compose(double, square, double1)(5) 

in der letzten return-Anweisung

funcs.reduce((a, b) => (...args) => a(b(...args))) 

Was ist der Zweck ist es, eine Funktion der Rücksendung, die ..args nimmt, warum nicht einfach haben

funcs.reduce((a, b) => a(b(...args))) ? 
+0

'komponieren (Doppel, quadratisch, double1) (5)' <- es ist das '(5)' –

Antwort

0

In Ihrer vorgeschlagenen Variante Sie wird das Ergebnis der zurückgeben, wo Sie die args nicht übergeben haben. Sie erhalten also einen Kompilierfehler, der args nicht definiert ist.

Aber in der oberen Variante gibt es eine Funktion, die Parameter verwendet (args - als args geben wird 5) und gibt das Ergebnis von a(b(...args)) wie

(...args) => a(b(...args)) 

Schauen Sie sich das Beispiel. Es zeigt den Unterschied mit zwei Ansätzen.

function a(str) { 
 
    console.log('In a'); 
 
    console.log(str); 
 
    return str; 
 
} 
 

 
function b(str) { 
 
    console.log('In b'); 
 
    console.log(str); 
 
    return str; 
 
} 
 

 
const message = a(b('text')); // This is your variant. Immediate result. 
 
console.log(`Message is ${message}`); 
 

 
const func = (someText) => a(b(someText)); // This is the given variant. Need to call `func` to get the result. 
 

 
const anotherMessage = func('anotherText'); Here I need to call `func` and pass my parameter to it. 
 
console.log(`Message is ${anotherMessage}`);

Verwandte Themen