⊗jsPmCxCL 435 of 505 menu

Verlust des Kontexts in JavaScript

Nehmen wir an, wir haben eine Funktion in einer Funktion. Nennen wir die äußere Funktion parent und die innere child:

function parent() { function child() { } }

Aus vorherigen Lektionen wissen Sie, dass, wenn eine Variable in der äußeren Funktion gesetzt wird - sie in der inneren verfügbar sein wird:

function parent() { let str = 'abcde'; function child() { console.log(str); // gibt 'abcde' aus } child(); // rufen die innere Funktion auf } parent(); // rufen die äußere Funktion auf

Es gibt jedoch einen Nuance: Die innere Funktion hat Zugriff auf alle Variablen der äußeren, hat aber keinen Zugriff auf this. Das heißt: Wenn die äußere Funktion an ein DOM-Element gebunden ist, dann wird this in ihr auf dieses Element zeigen, aber this der inneren Funktion - wird es nicht!

Worauf wird dann this zeigen der inneren Funktion? Antwort: Es wird gleich undefined sein (im strikten Modus), da die Funktion an nichts gebunden ist.

Lassen Sie uns das in der Praxis überprüfen. Nehmen wir an, wir haben ein Input-Feld:

<input id="elem" value="text">

Binden wir an dieses Input-Feld die Funktion parent, die beim Verlust des Fokus durch das Input-Feld aufgerufen wird:

"use strict"; let elem = document.querySelector('#elem'); elem.addEventListener('blur', parent); // Wird beim Verlust des Fokus aufgerufen: function parent() { // hier wird irgendein Code sein function child() { // hier wird irgendein Code sein } child(); // rufen die Kindfunktion auf }

Lassen Sie uns den Inhalt von this an zwei Stellen in der Konsole ausgeben: innerhalb der Funktion parent und innerhalb der Funktion child:

"use strict"; let elem = document.querySelector('#elem'); elem.addEventListener('blur', parent); function parent() { console.log(this); // gibt die Referenz auf unser Input-Feld aus function child() { console.log(this); // gibt undefined aus } child(); }

Starten Sie diesen Code, lassen Sie das Input-Feld den Fokus verlieren und schauen Sie in die Konsole - Sie werden sehen, dass der erste console.log in der Konsole die Referenz auf unser Input-Feld ausgibt, und der zweite - einfach undefined. Eine solche Situation, in der this auf unerwartete Weise nicht auf das zeigt, was wir brauchen, wird Verlust des Kontexts genannt.

Nehmen wir nun an, dass wir in der einen und in der anderen Funktion den value des Input-Felds ausgeben. Bestimmen Sie, was in den durch Kommentare markierten Codezeilen ausgegeben wird:

"use strict"; let elem = document.querySelector('#elem'); elem.addEventListener('blur', parent); function parent() { console.log(this.value); // was wird ausgegeben? function child() { console.log(this.value); // was wird ausgegeben? } child(); }
Deutsch
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Wir verwenden Cookies für den Betrieb der Website, Analyse und Personalisierung. Die Datenverarbeitung erfolgt gemäß der Datenschutzerklärung.
alle akzeptieren anpassen ablehnen