Heim > Web-Frontend > js-Tutorial > Hauptteil

Warum schlägt dieser JavaScript-Code fehl, obwohl ähnliche Beispiele funktionieren?

Linda Hamilton
Freigeben: 2024-10-25 07:59:29
Original
460 Leute haben es durchsucht

Why Does This JavaScript Code Fail, Even Though Similar Examples Work?

Deklaration und Auswertung von JavaScript-Funktionen

Hintergrund:

In JavaScript können Funktionen sein mithilfe von Ausdrücken deklariert oder erstellt werden. Funktionsdeklarationen erfolgen während der Kompilierungsphase, während Funktionsausdrücke während der Ausführungsphase ausgewertet werden. Das Verständnis dieser Unterscheidung ist entscheidend für das Verständnis des Verhaltens von JavaScript-Code.

Die Frage:

Warum schlägt das erste Beispiel im folgenden Codeblock fehl, während die übrigen Beispiele erfolgreich ausführen?

<code class="javascript">// 1 - does not work
(function() {
  setTimeout(someFunction1, 10);
  var someFunction1 = function() { alert('here1'); };
})();

// ... other examples</code>
Nach dem Login kopieren

Die Antwort:

Das Scheitern des ersten Beispiels ist nicht auf ein Bereichs- oder Abschlussproblem zurückzuführen, sondern eher auf ein Missverständnis zwischen Deklarationen und Ausdrücken .

Funktionsdeklarationen vs. Ausdrücke:

  • Funktions-Deklarationen folgen der Syntax: Funktionsname (Argumente) {Code}
  • Funktions-Ausdrücke werden als Ausdrücke geschrieben, ähnlich wie Funktionsdeklarationen, aber zur Laufzeit ausgewertet.

Phase 1: Kompilierung

Während der Kompilierung verarbeitet der Compiler Funktionsdeklarationen und erstellt Variablen für die Funktionen. Im ersten Beispiel wird die Variable someFunction1 erstellt, bleibt jedoch undefiniert, da ihr Wert (der Funktionskörper) später ausgewertet wird.

Phase 2: Ausführung

Beispiel 1:

Zur Laufzeit trifft der Interpreter auf setTimeout(someFunction1, 10) und versucht, eine undefinierte someFunction1 an setTimeout zu übergeben.

Beispiel 2:

Im Gegensatz dazu ist die Funktion someFunction2() eine Deklaration, die die Funktion während der Kompilierung erstellt. Wenn setTimeout aufgerufen wird, erhält es die kompilierte Funktionsreferenz.

Beispiel 3:

Hier wird eine anonyme Funktion an setTimeout übergeben, die einen Abschluss für die Variable erstellt someFunction3. Wenn setTimeout ausgelöst wird, wurde someFunction3 ein Wert zugewiesen und die Funktion wird erfolgreich ausgeführt.

Beispiel 4:

Ähnlich wie Beispiel 2 wird die Funktion someFunction4 deklariert, wodurch seine Referenz ist für setTimeout verfügbar.

Zusätzliche Klarstellung:

  • Funktionsargumente werden in JavaScript als Wert für primitive Typen und als Referenz für Objekte übergeben. Dies bedeutet, dass setTimeout keinen Abschluss für someFunction erhält.
  • Das Verständnis der Unterscheidung zwischen Deklarationen und Ausdrücken ist entscheidend für die Vorhersage des Verhaltens von JavaScript-Code.

Das obige ist der detaillierte Inhalt vonWarum schlägt dieser JavaScript-Code fehl, obwohl ähnliche Beispiele funktionieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!