Mit () => {}
und function () {}
erhalten wir zwei sehr ähnliche Möglichkeiten, Funktionen in ES6 zu schreiben. In anderen Sprachen unterscheiden sich Lambda-Funktionen oft dadurch, dass sie anonym sind, aber in ECMAScript kann jede Funktion anonym sein. Jeder der beiden Typen hat einzigartige Anwendungsbereiche (zum Beispiel, wenn this
entweder explizit gebunden werden muss oder explizit nicht gebunden werden muss). Zwischen diesen Bereichen gibt es eine große Anzahl von Fällen, in denen beide Notationen funktionieren werden.
Pfeilfunktionen in ES6 haben mindestens zwei Einschränkungen:
- Funktionieren nicht mit
new
und können nicht verwendet werden, wennprototype
erstellt wird - Fixiertes
this
an den Bereich bei der Initialisierung gebunden
Abgesehen von diesen beiden Einschränkungen könnten Pfeilfunktionen theoretisch normale Funktionen fast überall ersetzen. Was ist der richtige Ansatz für ihre praktische Verwendung? Sollten Pfeilfunktionen z.B. verwendet werden:
- "überall dort, wo sie funktionieren", d.h. überall dort, wo eine Funktion nicht agnostisch bezüglich der
this
-Variable sein muss und wir kein Objekt erstellen - nur "überall dort, wo sie benötigt werden", z.B. bei Event Listeners, Timeouts, die an einen bestimmten Bereich gebunden werden müssen
- mit 'kurzen' Funktionen, aber nicht mit 'langen' Funktionen
- nur mit Funktionen, die keine weitere Pfeilfunktion enthalten
Ich suche nach einer Leitlinie zur Auswahl der geeigneten Funktionsnotation in der zukünftigen Version von ECMAScript. Die Leitlinie muss klar sein, damit sie Entwicklern in einem Team beigebracht werden kann, und konsistent sein, so dass sie kein ständiges Refactoring von einer Funktionsnotation zur anderen erfordert.
Die Frage richtet sich an Personen, die über Codestil im Kontext des kommenden ECMAScript 6 (Harmony) nachgedacht haben und bereits mit der Sprache gearbeitet haben.