2017-05-10 2 views
0

Können Sie diesen Code erklären? Ist es currying?ECMA Doppelfettpfeil verwenden?

export const thing = (...items) => (wotsit) => { 
     const thing = (props, {enums}) => { 
      // ... 
     }; 

     thing.contextTypes = { 
      enums: PropTypes.object 
     }; 

     return thing; 
    }; 

    export default thing; 
+0

'=>' dass Lambda für anonyme Funktion verwendet, 'export' verwendet werden Funktion, Variablen zu exportieren, die von anderen Dateien importiert werden können –

Antwort

2

Ja, es ist. Ohne die arrow functions, wird es wie folgt aussehen:

export const thing = function(...items) { 

    // `items` will be an array with all the arguments that you pass in. 

    return function(wotsit) { 
     const thing = function(props, {enums}) { 
      // ... 
     }; 

     thing.contextTypes = { 
      enums: PropTypes.object 
     }; 

     return thing; 
    }; 
}; 

export default thing; 

Auf der anderen Seite, dieses:

const thing = (props, {enums}) => { 
    // ... 
}; 

wird über Parameter destructuring. Es ist das gleiche wie folgt aus:

const thing = (props, options) => { 
    let enums = options.enums; 
}; 
+0

Sollten wir nicht' verwenden bind' hier , wie Sie keine fetten Pfeile in Ihrem Code verwendet haben? – bharadhwaj

+1

Wenn Sie 'this' in einer dieser Funktionen verwenden. Siehe http://stackoverflow.com/questions/26477245/when-to-use-bind-in-js – Danziger

+1

Ich denke, es ist die implizite Rückkehr, die mich warf - so viel ECMA hat alle Lesbarkeit der frühen 1990er Perl-Code. Die Perl-Community hat implizite Renditen (und vieles andere) sozial inakzeptabel gemacht, ich hoffe, die ECMA-Peeps folgen bald. Danke für Ihre Hilfe. – LeeGee

1

Es gibt eine Funktion zurück, die zu einem späteren Zeitpunkt aufgerufen wird. Wenn die Funktionen nicht in ES6 sind, würde es in etwa so aussehen:

function thing(a, b) { 
    return function(wotsit) { 
     const thing = {}; 
     ... 
     return thing; 
    } 
} 

die schließlich so etwas wie dies funktionieren würde:

let a = thing(1, 2); 
let b = a(wotsit); // Gives you back thing object 
Verwandte Themen