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:

javascriptfunction 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:

javascriptfunction func() {
  console.log(this); // riferimento all'oggetto window
}

func();

Se invece la modalità è strict, in this sarà memorizzato undefined:

javascript"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à:

javascript"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.