⊗jsPmCxCL 435 of 505 menu

Konteksti kaotamine JavaScriptis

Oletame, et meil on funktsioon funktsioonis. Nimetame välisfunktsiooni parent-iks ja sisefunktsiooni child-iks:

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

Eelmistest õppetükkidest teate, et kui määrata mingi muutuja välisfunktsioonis - on see kättesaadav sisefunktsioonis:

function parent() { let str = 'abcde'; function child() { console.log(str); // väljastab 'abcde' } child(); // kutsume sisefunktsiooni } parent(); // kutsume välisfunktsiooni

Siiski on nüanss: sisefunktsioonil on juurdepääs kõikidele välisfunktsiooni muutujatele, kuid tal ei ole juurdepääsu this-ile. See tähendab: kui välisfunktsioon on seotud mõne DOM elemendiga, siis this selles viitab sellele elemendile, kuid this sisefunktsioonis ei viita!

Millele siis this sisefunktsioonis viitab? Vastus: see on võrdne undefined-ga (ranget režiimi), kuna funktsioon pole millegagi seotud.

Kontrollime seda praktikas. Oletame, et meil on antud input:

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

Seome selle inputiga funktsiooni parent, mida kutsutakse välja inputi fookuse kaotamisel:

"use strict"; let elem = document.querySelector('#elem'); elem.addEventListener('blur', parent); // Kutsutakse välja fookuse kaotamisel: function parent() { // siin on mingi kood function child() { // siin on mingi kood } child(); // kutsume lapsefunktsiooni }

Väljastame this sisu konsooli kahes kohas: funktsiooni parent sees ja funktsiooni child sees:

"use strict"; let elem = document.querySelector('#elem'); elem.addEventListener('blur', parent); function parent() { console.log(this); // väljastab viite meie inputile function child() { console.log(this); // väljastab undefined } child(); }

Käivitage see kood, kaotage inputi fookus ja vaadake konsooli - näete, et esimene console.log väljastab konsooli viite meie inputile, ja teine - lihtsalt undefined. Sellist olukorda, kus this ootamatult viitab mitte sellele, mida me vajame, nimetatakse konteksti kaotamiseks.

Oletame nüüd, et nii ühes kui teises funktsioonis me väljastame inputi value. Määrake, mida väljastatakse koodiridadel, mis on märgitud kommentaaridega:

"use strict"; let elem = document.querySelector('#elem'); elem.addEventListener('blur', parent); function parent() { console.log(this.value); // mida väljastab? function child() { console.log(this.value); // mida väljastab? } child(); }
Eesti
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Me kasutame saidi toimimiseks, analüüsi ja personaliseerimiseks küpsiseid. Andmete töötlemine toimub vastavalt Privaatsuspoliitikale.
nõustu kõigega häälesta keeldu