Was wird diese Funktion zurückgeben?
(function() {
 let f = this ? class g { } : class h { };
 return [ typeof f, typeof h ];
 })();

Verständnis der Verwendung von Conditional (Ternary) Operator und Scope von Variablen in JavaScript

Der gegebene Code ist ein anonymes Selbstaufrufendes Funktion (IIFE), was bedeutet, dass die Funktion nach ihrer Definition sofort ausgeführt wird. In der Funktion wird mithilfe des Conditional (Ternary) Operators überprüft, ob das Schlüsselwort this in ihrem Kontext definiert ist. Wenn this nicht undefiniert ist, legt die Funktion f als eine Klasse g fest, sonst als eine Klasse h.

Die Rückgabe dieser Funktion ist ein Array, das aus den Typen von f und h besteht. Da f durch den Conditional Operator als entweder die Klasse g oder h definiert wird und Klassen in JavaScript vom typeof Operator als function betrachtet werden, ist der erste Wert im zurückgegebenen Array function.

Der zweite Wert im Array hängt vom Scope der Variable h ab. Da h innerhalb des ternären Operators definiert und nicht außerhalb des Operators zurückgegeben wird, liegt es außerhalb des Scopes der Rückgabeanweisung und wird daher als undefined betrachtet.

Das erklärt, warum die richtige Antwort auf die Frage ["function", "undefined"] ist. Es ist wichtig zu beachten, dass der Geltungsbereich von Variablen in JavaScript auf ihre Funktion beschränkt ist, in der sie definiert wurden. Daher kann auf die Variable h nicht außerhalb des ternären Operators zugegriffen werden.

Ein wichtiger Rat für die Best Practice in JavaScript ist es, den Geltungsbereich von Variablen zu berücksichtigen, wenn Sie sie definieren und verwenden. Ausgehend vom Beispiel oben kann gesehen werden, dass dies Auswirkungen darauf hat, was der Code tatsächlich zurückgeben kann und letztendlich sein Verhalten und seine Funktionalität beeinflussen kann. Es ist auch daran zu erinnern, dass Klassen und Funktionen in JavaScript sehr ähnlich sind und daher vom typeof Operator als gleich betrachtet werden. Sofern nicht anders angegeben, wird this innerhalb einer Funktion den globalen Kontext referenzieren.

Finden Sie das nützlich?