Grunnleggende om kontekst i JavaScript

La oss si at vi har en funksjon func, innenfor hvor this brukes:

javascriptfunction func() {
  console.log(this.value);
}

Hva peker this på i denne funksjonen? Det vet vi ikke. Og JavaScript vet ikke. Og selve funksjonen vet ikke. Det vil si at i øyeblikket funksjonen opprettes, er det ikke bestemt hva this peker på. Og dette vil bare bli bestemt når funksjonen kalles.

La oss si at vi har et input-felt:

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

La oss knytte funksjonen vår func til dette input-feltet så den utføres når input-feltet mister fokus. Nå, i øyeblikket funksjonen utføres, vil this peke på input-feltet vårt:

javascriptlet elem = document.querySelector('#elem');

elem.addEventListener('blur', func);
function func() {
  console.log(this.value); // vil skrive ut 'text' ved tap av fokus
}

Men vi kan jo ha ikke bare ett input-felt, men flere:

html<input id="elem1" value="text1">
<input id="elem2" value="text2">

Og til hvert av disse input-feltene kan vi knytte funksjonen vår func. I dette tilfellet vil this for det første elementet i kalløyeblikket peke på det, og for det andre - på det.

I praksis betyr dette at this inni funksjonen avhenger av hvilket input-felt mister fokus:

javascriptlet elem1 = document.querySelector('#elem1');
elem1.addEventListener('blur', func);

let elem2 = document.querySelector('#elem2');
elem2.addEventListener('blur', func);

function func() {
  console.log(this.value); // vil skrive ut enten 'text1' eller 'text2'
}

I utgangspunktet er denne egenskapen til this veldig praktisk - vi oppretter bare én funksjon og knytter den til et hvilket som helst antall input-felter. Hvis this ikke pekte på det elementet der hendelsen inntraff, ville vi ikke klart dette - vi ville måttet opprette en egen funksjon for hvert input-felt med den samme koden!