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

Warum funktioniert „bind()' nicht mit Pfeilfunktionen „this'?

Dec 13, 2024 pm 05:07 PM

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

Rätsel der Bindung von „dies“ in Pfeilfunktionen: Ein aufgedecktes Dilemma

Trotz der verführerischen Einfachheit von Pfeilfunktionen ist ihr unergründliches Verhalten in Bezug auf „ Dies hat viele Entwickler verwirrt. Die Unfähigkeit, „dies“ an einen bestimmten Kontext innerhalb einer Pfeilfunktion zu binden, ist zu einer wiederkehrenden Quelle der Frustration geworden.

Um das Dilemma zu veranschaulichen, betrachten Sie diesen Code:

1

2

3

4

5

6

7

const f = () => console.log(this);

 

const o = { a: 42 };

 

const fBound = f.bind(o);

 

fBound(); // Expected: { a: 42 }, Actual: { window: Window }

Nach dem Login kopieren

In diesem Beispiel , versuchen wir, den „this“-Kontext der Pfeilfunktion „f“ mit der Methode „bind()“ an das Objekt „o“ zu binden. Der Aufruf von „fBound()“ protokolliert jedoch aus unerklärlichen Gründen das globale „window“-Objekt anstelle des erwarteten „o“-Objekts.

Dieses verwirrende Verhalten liegt in der inhärenten Natur von Pfeilfunktionen begründet. Im Gegensatz zu regulären Funktionen, die ihren eigenen „This“-Kontext haben, erben Pfeilfunktionen ihre „This“-Bindung vom umgebenden lexikalischen Bereich. In diesem Fall wurde „f“ innerhalb des globalen Bereichs definiert, wodurch „this“ an das globale „window“-Objekt gebunden wurde.

In der ECMAScript 2015-Spezifikation heißt es eindeutig:

„Jeder Verweis auf arguments, super, this oder new.target innerhalb einer ArrowFunction müssen in eine Bindung in einer lexikalisch umschließenden Umgebung aufgelöst werden. Das erneute Binden von „this“ innerhalb einer Pfeilfunktion wird unmöglich. „this“ bleibt für immer in dem Kontext verankert, in dem die Pfeilfunktion definiert wurde.

Wenn die sinnvolle Verwendung von „this“ für Ihren Code von entscheidender Bedeutung ist, besteht die umsichtige Vorgehensweise darin, reguläre Funktionen anstelle von zu verwenden Pfeilfunktionen. Reguläre Funktionen bieten eine bessere Kontrolle über die „this“-Bindung und ermöglichen es Ihnen, „this“ mithilfe von „bind()“ oder anderen Methoden explizit an den gewünschten Kontext zu binden.

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

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

10 JQuery Syntax Highlighters

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

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