Contesto di una funzione non associata in JavaScript
Diamo un'occhiata a cosa succede se in una funzione
si specifica this, ma non la si associa
a nessun elemento, in questo modo:
function func() {
console.log(this);
}
func();
In questo caso il risultato dipende dal fatto che
la modalità strict
sia attiva o meno. Se la modalità non è strict,
in this sarà memorizzato un riferimento a
window:
function func() {
console.log(this); // riferimento all'oggetto window
}
func();
Se invece la modalità è strict, in this sarà
memorizzato undefined:
"use strict";
function func() {
console.log(this); // undefined
}
func();
Da quanto detto sopra potrebbe sembrare che
in modalità strict this sia sempre
undefined. Niente di più sbagliato! Se semplicemente
si stampa this al di fuori di una funzione, in esso
ci sarà un riferimento a window indipendentemente
dalla modalità:
"use strict";
console.log(this); // in this c'è un riferimento a window
Conclusioni
In qualsiasi funzione si può scrivere this,
ciò non porterà ad alcun errore JavaScript.
Ma cosa esattamente ci sarà dentro questo this
non è definito fino al momento della chiamata della funzione.
Inoltre, in chiamate diverse della funzione this
può assumere valori diversi. Tutto dipende
dal contesto in cui la funzione è stata chiamata.