Heim >Web-Frontend >js-Tutorial >Warum funktioniert „bind()' nicht mit Pfeilfunktionen in JavaScript?

Warum funktioniert „bind()' nicht mit Pfeilfunktionen in JavaScript?

Susan Sarandon
Susan SarandonOriginal
2024-12-08 22:39:11897Durchsuche

Why Doesn't `bind()` Work with Arrow Functions in JavaScript?

Pfeilfunktionsbindung: Eine Erklärung

Bei der Verwendung von Pfeilfunktionen in JavaScript können Entwickler auf unerwartetes Verhalten hinsichtlich der Bindung von „this“ stoßen. Im Gegensatz zu regulären Funktionen behalten Pfeilfunktionen einen lexikalischen Gültigkeitsbereich bei, was bedeutet, dass sie die „this“-Bindung der Umgebung erben, in der sie definiert wurden. Daher ist es nicht möglich, „this“ innerhalb einer Pfeilfunktion erneut zu binden.

Betrachten Sie dieses Beispiel:

var f = () => console.log(this);
var o = {'a': 42};
var fBound = f.bind(o);
fBound();

In diesem Codeausschnitt versuchen wir, die Pfeilfunktion „f“ zu binden. zum Objekt 'o' mithilfe der Methode '.bind()'. Wenn wir jedoch „fBound“ aufrufen, gibt es das globale „window“-Objekt anstelle von „o“ aus.

Das liegt daran, dass Pfeilfunktionen ihre „this“-Bindung von der lexikalisch umschließenden Umgebung erben, was in diesem Fall der Fall ist ist der globale Ausführungskontext. Daher beziehen sich „f()“ und „fBound()“ immer auf das globale „this“.

Um dieses Problem zu vermeiden, wird empfohlen, reguläre Funktionen zu verwenden, wenn eine Bindung erforderlich ist. Diese Funktionen erstellen einen neuen Ausführungskontext, sodass Sie die Bindung „this“ mithilfe der Methode „.bind()“ explizit festlegen können.

Das obige ist der detaillierte Inhalt vonWarum funktioniert „bind()' nicht mit Pfeilfunktionen in JavaScript?. 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