Trotz seines unkonventionellen Erscheinungsbilds ermöglicht Ihnen JavaScript die Verwendung von Funktionen, bevor sie explizit definiert werden. Dieses scheinbar magische Verhalten ergibt sich aus der besonderen Natur von Funktionsdeklarationen.
In JavaScript verhalten sich Funktionsdeklarationen anders als Zuweisungen mit Funktionsausdrücken. Wenn eine Funktion mit dem Funktionsschlüsselwort deklariert wird, wird ihr Bezeichner gebunden, bevor Code innerhalb des Funktionsblocks ausgeführt wird.
Betrachten Sie beispielsweise den folgenden Code:
function fooCheck() { alert(internalFoo()); // Uses internalFoo() before definition return internalFoo(); // Still uses it function internalFoo() { return true; } // Defined later } fooCheck();
In diesem Code , kann die Funktion fooCheck auf die Funktion internalFoo zugreifen, auch wenn sie später im selben Block definiert wird. Dies liegt daran, dass die Funktionsdeklaration selbst dafür sorgt, dass der Bezeichner internalFoo gebunden und verfügbar gemacht wird.
Im Gegensatz dazu ändern Sie die Definition in einen Funktionsausdruck, der einer Variablen zugewiesen ist , funktioniert der Code nicht mehr:
var internalFoo = function() { return true; };
Dies liegt daran, dass Funktionsausdrücke von oben nach unten ausgewertet werden und die Zuweisungsanweisung erst ausgeführt wird, nachdem fooCheck aufgerufen wurde.
Funktionsdeklarationen und Funktionsausdrücke sind syntaktisch unterschiedliche Einheiten. Funktionsdeklarationen sind Anweisungen, während Funktionsausdrücke Ausdrücke sind. Dieser Unterschied führt zu den unterschiedlichen Verhaltensweisen, die in den Codebeispielen beobachtet werden.
Dieses Verhalten ist im ECMAScript-Standard (Abschnitt 10.1.3) beschrieben. Obwohl der Standard möglicherweise nicht die am besten zugängliche Lektüre ist, bietet er eine umfassende Erklärung dieses komplizierten Aspekts von JavaScript.
Das obige ist der detaillierte Inhalt vonWarum können Sie JavaScript-Funktionen verwenden, bevor sie definiert sind?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!