Heim  >  Artikel  >  Web-Frontend  >  Warum bezieht sich „dies“ nicht auf die aufrufende Funktion in JavaScript-Rückrufen?

Warum bezieht sich „dies“ nicht auf die aufrufende Funktion in JavaScript-Rückrufen?

Susan Sarandon
Susan SarandonOriginal
2024-11-04 05:21:01884Durchsuche

Why Doesn't 'this' Refer to the Calling Function in JavaScript Callbacks?

Wenn dies argumentiert: „This“ in Callback-Funktionen verstehen

In JavaScript wird der Wert von this in einem Funktionsaufruf durch bestimmt Kontext, in dem die Funktion ausgeführt wird. Bei der Übergabe als Argument können die Regeln jedoch kompliziert werden.

Konkret ergibt sich folgendes Szenario: Wenn eine Callback-Funktion als Argument übergeben wird, warum wird diese dann nicht auf die aufrufende Funktion gesetzt? der Rückruf?

Die Hierarchie von „diesem“ verstehen

Um zu verstehen, warum dies dort festgelegt ist, wo es ist, müssen wir die Hierarchie der Funktionsaufrufe berücksichtigen:

  • obj.prepareRandomFunction() setzt dies auf obj (Regel #2 aus der Antwort).
  • randomFunction(this.sumData.bind(this)) übergibt this.sumData.bind(this ) als Argument (Regel Nr. 1).
  • Innerhalb von randomFunction setzt callback(data) dies auf das globale Objekt (Regel Nr. 1).

Bevor randomFunction jedoch die aufruft Beim Rückruf wird this.sumData.bind(this) verwendet, um eine neue Funktion zu erstellen (Regel Nr. 5). Diese neue Funktion ruft die ursprüngliche Callback-Funktion auf, ist aber jetzt an obj (das an bind übergebene Argument) gebunden.

Auswirkungen für Callback-Funktionen

Bei der Übergabe einer Methode Als Rückruf ist es wichtig zu verstehen, dass er nicht als obj.method() aufgerufen wird. Dies bedeutet, dass innerhalb der Rückruffunktion nicht der richtige Wert vorhanden ist. Um dieses Problem zu umgehen, können Sie bind() verwenden, um den Wert dafür innerhalb des Rückrufs festzulegen.

Weitere nützliche Hinweise

  • Regel Nr. 6 in Die Antwort beschreibt, wie ES6-Pfeilfunktionen den aktuellen lexikalischen Wert davon beibehalten, auch in Rückruffunktionen.
  • .apply() und .call() können verwendet werden, um neue Funktionsaufrufe mit bestimmten Werten davon zu erstellen.
  • bind() kann verwendet werden, um neue Funktionen zu erstellen, die die ursprüngliche Funktion mit einem benutzerdefinierten Wert davon aufrufen.
  • Das Verständnis der komplexen Natur davon ist für eine effektive JavaScript-Codierung und für die Beherrschung von Konzepten wie z. B. unerlässlich Rückrufe.

Das obige ist der detaillierte Inhalt vonWarum bezieht sich „dies“ nicht auf die aufrufende Funktion in JavaScript-Rückrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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