Inhaltsverzeichnis
JavaScript-Funktionsdeklarations- und Auswertungsreihenfolge
Warum schlägt das erste Beispiel fehl?
Funktionsdeklarationen vs. Ausdrücke
Fallanalyse
Zusammenfassung
Heim Web-Frontend js-Tutorial Warum schlägt mein JavaScript-Code fehl, wenn ich „setTimeout' mit Funktionsausdrücken verwende?

Warum schlägt mein JavaScript-Code fehl, wenn ich „setTimeout' mit Funktionsausdrücken verwende?

Oct 24, 2024 pm 06:50 PM

Why Does My JavaScript Code Fail When Using `setTimeout` With Function Expressions?

JavaScript-Funktionsdeklarations- und Auswertungsreihenfolge

Warum schlägt das erste Beispiel fehl?

In JavaScript umfasst die Codeausführung zwei Phasen: Kompilierung und Auswertung. Das erste Beispiel scheitert an einem grundlegenden Missverständnis zwischen Funktionsdeklarationen und Ausdrücken in Bezug auf diese Phasen.

Funktionsdeklarationen vs. Ausdrücke

Funktionsdeklarationen verwenden Sie das Schlüsselwort function und folgen Sie dem Syntax:

function name (arguments) {code}
Nach dem Login kopieren

Funktionsausdrücke hingegen werden im Ausdruckskontext geschrieben und folgen der gleichen Syntax wie Deklarationen, außer dass sie in Klammern eingeschlossen sind. Ausdrücke werden während der Ausführung verarbeitet, nicht bei der Kompilierung.

Fallanalyse

Beispiel 1:

(function() {
setTimeout(someFunction1, 10);
var someFunction1 = function() { alert('here1'); };
})();
Nach dem Login kopieren

Kompilierung: SomeFunction1 ist als undefiniert definiert.

Ausführung: setTimeout wird mit dem undefinierten Wert von someFunction1 aufgerufen.

Beispiel 2:

(function() {
setTimeout(someFunction2, 10);
function someFunction2() { alert('here2'); }
})();
Nach dem Login kopieren

Kompilierung: SomeFunction2 wird als Funktion deklariert..

Ausführung: setTimeout wird mit der kompilierten someFunction2-Funktion aufgerufen.

Beispiel 3:

(function() {
setTimeout(function() { someFunction3(); }, 10);
var someFunction3 = function() { alert('here3'); };
})();
Nach dem Login kopieren

Kompilierung: SomeFunction3 ist zunächst als undefiniert definiert.

Ausführung: Eine anonyme Funktion wird übergeben zu setTimeout, wodurch ein Abschluss für someFunction3 erstellt wird. Später wird someFunction3 eine Funktion zugewiesen, die ihren undefinierten Wert überschreibt.

Beispiel 4:

(function() {
setTimeout(function() { someFunction4(); }, 10);
function someFunction4() { alert('here4'); }
})();
Nach dem Login kopieren

Ähnlich wie Beispiel 2 wird someFunction4 deklariert, bevor es an übergeben wird setTimeout.

Zusammenfassung

Das erste Beispiel schlägt fehl, weil someFunction1 nicht deklariert wird, bevor es während der Kompilierung an setTimeout übergeben wird. Funktionsausdrücke müssen während der Ausführung ausgewertet werden, nachdem Deklarationen verarbeitet wurden. Daher ist die Reihenfolge der Ausdrücke bei der Verwendung von Funktionsausdrücken entscheidend, insbesondere bei der Übergabe an asynchrone Funktionen wie setTimeout.

Das obige ist der detaillierte Inhalt vonWarum schlägt mein JavaScript-Code fehl, wenn ich „setTimeout' mit Funktionsausdrücken verwende?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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

Heiße Artikel -Tags

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Ersetzen Sie Stringzeichen in JavaScript Ersetzen Sie Stringzeichen in JavaScript Mar 11, 2025 am 12:07 AM

Ersetzen Sie Stringzeichen in JavaScript

Benutzerdefinierte Google -Search -API -Setup -Tutorial Benutzerdefinierte Google -Search -API -Setup -Tutorial Mar 04, 2025 am 01:06 AM

Benutzerdefinierte Google -Search -API -Setup -Tutorial

Beispielfarben JSON -Datei Beispielfarben JSON -Datei Mar 03, 2025 am 12:35 AM

Beispielfarben JSON -Datei

8 atemberaubende JQuery -Seiten -Layout -Plugins 8 atemberaubende JQuery -Seiten -Layout -Plugins Mar 06, 2025 am 12:48 AM

8 atemberaubende JQuery -Seiten -Layout -Plugins

10 JQuery Syntax Highlighters 10 JQuery Syntax Highlighters Mar 02, 2025 am 12:32 AM

10 JQuery Syntax Highlighters

Erstellen Sie Ihre eigenen AJAX -Webanwendungen Erstellen Sie Ihre eigenen AJAX -Webanwendungen Mar 09, 2025 am 12:11 AM

Erstellen Sie Ihre eigenen AJAX -Webanwendungen

Was ist ' this ' in JavaScript? Was ist ' this ' in JavaScript? Mar 04, 2025 am 01:15 AM

Was ist ' this ' in JavaScript?

10 JavaScript & JQuery MVC -Tutorials 10 JavaScript & JQuery MVC -Tutorials Mar 02, 2025 am 01:16 AM

10 JavaScript & JQuery MVC -Tutorials

See all articles