⊗jsPmCxCL 435 of 505 menu

Verlies van konteks in JavaScript

Kom ons sê ons het 'n funksie binne 'n funksie. Kom ons noem die buitenste funksie parent, en die binnerste - child:

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

Uit vorige lesse weet jy dat as jy 'n veranderlike in die buitenste funksie definieer - dit sal toeganklik wees in die binnerste:

function parent() { let str = 'abcde'; function child() { console.log(str); // sal 'abcde' uitvoer } child(); // roep die binnerste funksie aan } parent(); // roep die buitenste funksie aan

Daar is eger 'n nuanse: die binnerste funksie het toegang tot al die veranderlikes van die buitenste, maar het nie toegang tot this nie. Dit beteken: as die buitenste funksie aan 'n DOM-element gebind is, sal this daarin verwys na daardie element, maar this in die binnerste funksie - sal nie!

Waarop sal this dan in die binnerste funksie wys? Antwoord: dit sal gelyk wees aan undefined (in streng modus), aangesien die funksie aan niks gebind is nie.

Kom ons toets dit in die praktyk. Kom ons sê ons het 'n invoerveld:

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

Kom ons bind die funksie parent aan hierdie invoerveld, wat uitgevoer sal word wanneer die invoerveld fokus verloor:

"use strict"; let elem = document.querySelector('#elem'); elem.addEventListener('blur', parent); // Sal uitgevoer word by fokusverlies: function parent() { // daar sal een of ander kode wees function child() { // daar sal een of ander kode wees } child(); // roep die kindfunksie aan }

Kom ons toon die inhoud van this in die konsole op twee plekke: binne die funksie parent en binne die funksie child:

"use strict"; let elem = document.querySelector('#elem'); elem.addEventListener('blur', parent); function parent() { console.log(this); // sal 'n verwysing na ons invoerveld toon function child() { console.log(this); // sal undefined toon } child(); }

Laat hierdie kode loop, laat die invoerveld fokus verloor en kyk in die konsole - jy sal sien dat die eerste console.log 'n verwysing na ons invoerveld in die konsole sal toon, en die tweede - eenvoudig undefined. Sodanige situasie, wanneer this op 'n onverwagse manier nie wys na wat ons benodig nie, word genoem verlies van konteks.

Kom ons sê nou dat in beide die eerste en die tweede funksie ons die value van die invoerveld sal toon. Bepaal wat uitgevoer sal word in die kode-reëls, gemerk met kommentaar:

"use strict"; let elem = document.querySelector('#elem'); elem.addEventListener('blur', parent); function parent() { console.log(this.value); // wat sal dit toon? function child() { console.log(this.value); // wat sal dit toon? } child(); }
Afrikaans
AzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικά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
Ons gebruik koekies vir die werking van die webwerf, ontleding en personalisering. Die verwerking van data geskied volgens die Privaatheidsbeleid.
aanvaar alles instel verwerp