„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > 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?

Veröffentlicht am 24.11.2024
Durchsuche:822

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. Wenn dies jedoch als Argument übergeben wird, können die Regeln kompliziert werden.

Konkret entsteht das folgende 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 es tun Betrachten Sie die Hierarchie der Funktionsaufrufe:

  • obj.prepareRandomFunction() setzt dies auf obj (Regel Nr. 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 die globales Objekt (Regel Nr. 1).

Bevor randomFunction jedoch den Rückruf aufruft, verwendet es this.sumData.bind(this), 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 auf 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 davon 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 zum Erstellen neuer Funktionsaufrufe verwendet werden mit spezifischen Werten von this.
  • bind() kann verwendet werden, um neue Funktionen zu erstellen, die die ursprüngliche Funktion mit einem benutzerdefinierten Wert von this aufrufen.
  • Das Verständnis der komplexen Natur davon ist für effektives Arbeiten von entscheidender Bedeutung JavaScript-Codierung und zum Beherrschen von Konzepten wie Callbacks.
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3