Ich verwende eine Drittanbieter-Bibliothek mit einer Funktion, die Funktionen als Argumente verwendet. Ich mache einige bedingte Überprüfungen, um zu entscheiden, ob eine bestimmte Funktion als Parameter hinzugefügt werden soll oder nicht, und in einigen Fällen möchte ich keine Funktion bereitstellen. Wenn Sie in diesen Fällen null angeben, wird ein Fehler ausgegeben.
Ich habe diesen Code gefunden, der funktioniert, aber ich verstehe nicht ganz, was passiert.
compose(__DEV__ ? devTools() : f => f)
Ist f => f
äquivalent zu () => {}
einer leeren anonymen Funktion?
javascript
lambda
ecmascript-6
Etwas auf
quelle
quelle
f
laut MDNAntworten:
f => f
ist ähnlich wiefunction(f){ return f; }
So nah, aber nicht ganz das, was Sie erwartet hatten.
* - Wie in den Kommentaren erwähnt, gibt es subtile Unterschiede, aber für Ihre Frage halte ich sie nicht für besonders relevant. Sie sind in anderen Situationen sehr relevant.
quelle
f => f
undfunction(f) { return f; }
vorstellen :)new (f => f)
Würfe, es hat einen anderentoString
und aus irgendeinem Grund kann ich(f => f).arguments
Würfe in Chrome nicht ganz grok, aber nicht FF oder Edge.this
ist auch anders. (obwohl der Unterschied möglicherweise nicht erkennbar ist, wenn erthis
nicht im Funktionskörper erscheint ... Ich bin nicht sicher)f => f
ist die Identitätsfunktion . Es wird einfach das übergebene Argument zurückgegeben.Diese Funktion wird häufig als Standardwert für Transformationsprozesse verwendet, da keine Transformation durchgeführt wird.
Nein, die leere Funktion gibt nichts zurück. Die Identitätsfunktion gibt das übergebene Argument zurück.
quelle
Wenn Sie wissen möchten, was
f => f
bedeutet, ist die linke Seite der Parameter und die rechte Seite der Rückgabewert. So ist zum Beispielf => f*2
gleichbedeutend mit:Der von Ihnen beschriebene Code gibt alles zurück, was ihm als Eingabe zur Verfügung gestellt wird.
https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/Arrow_functions
quelle
Andere haben bereits erwähnt, was
f => f
tut, deshalb werde ich nicht näher darauf eingehen. Ich werde nur den Rest der Funktion erklären, weil es einen kleinen Unterschied zwischenf => f
und gibt__DEV__ ? devTools() : f => f
Der ternäre Operator prüft, ob
__DEV__
es sich um einen Wahrheitswert handelt, und gibt in diesem Fall die Funktion zurückdevTools()
. Andernfalls wird die Identitätsfunktion zurückgegeben,f => f
die nichts bewirkt. Anders ausgedrückt: Dieser Code aktiviert einige Funktionen des Entwicklungsmodus. Ohne den verbleibenden Code ist es schwer zu sagen, was dieser Modus hinzufügt, aber vermutlich werden dadurch einige zusätzliche Protokollierungsinformationen und weniger Verschleierung ermöglicht.quelle
__DEV__ ? devTools() : f => f
weist nichts zuf
. Haben Sie etwas aus dem Codebeispiel weggelassen?Mit dem ähnlichen Dilemma können Sie jederzeit Babel verwenden , um die Antwort zu erhalten.
Es kehrte so zurück:
BTW, => verwendet man wird ES6 genannt Feature Pfeil Ausdruck . Die andere Interessenbekundung
würde konvertieren zu:
Da Pfeilfunktionsausdrücke immer anonym sind, ist es sinnvoll, wenn Sie der Funktion den Namen hinzufügen:
würde konvertieren zu
quelle