Fondamenti del contesto in JavaScript

Supponiamo di avere una funzione func, all'interno della quale viene utilizzato this:

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

A cosa punta this in questa funzione? Non lo sappiamo. E JavaScript non lo sa. E la funzione stessa non lo sa. Cioè, nel momento della creazione della funzione, ciò a cui punta this non è definito. E sarà determinato solo quando questa funzione verrà chiamata.

Supponiamo di avere un input:

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

Colleghiamo a questo input la nostra funzione func in modo che venga eseguita quando l'input perde il focus. Ora, nel momento dell'esecuzione della funzione, this punterà al nostro input:

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

elem.addEventListener('blur', func);
function func() {
  console.log(this.value); // alla perdita del focus mostrerà 'text'
}

Ma potremmo non avere un solo input, bensì diversi:

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

E a ciascuno di questi input possiamo collegare la nostra funzione func. In questo caso, per il primo elemento this nel momento della chiamata della funzione punterà a esso, e per il secondo - a esso.

Nella pratica, questo significa che this all'interno della funzione dipende da quale input ha perso il focus:

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

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

function func() {
  console.log(this.value); // mostrerà 'text1' o 'text2'
}

In generale, questa caratteristica di this è molto conveniente - creiamo una sola funzione e la colleghiamo a qualsiasi numero di input. Se this non puntasse all'elemento in cui è avvenuto l'evento, non saremmo in grado di farlo - dovremmo creare per ogni input la propria funzione con lo stesso codice!