Accesso alle variabili esterne delle funzioni in JavaScript

Consideriamo il seguente codice:

javascriptlet num = 1; // impostiamo il valore della variabile

function func() {
  console.log(num); // lo visualizziamo nella console
}

func(); // chiamiamo la funzione

Come ho menzionato in precedenza, il valore della variabile non deve necessariamente essere prima della definizione della funzione, l'importante è che sia prima della sua chiamata:

javascriptfunction func() {
  console.log(num);
}

let num = 1;
func();

In realtà non è esattamente così. La nostra funzione conosce il valore della variabile anche prima della sua chiamata num:

javascriptlet num = 1;

function func() {
  console.log(num); // la funzione sa già che num = 1
}

Ecco un esempio più complesso:

javascriptlet num = 1; // in questo momento la funzione scopre che num = 1

function func() {
  console.log(num);
}

num = 2; // in questo momento la funzione scopre che num = 2

Aggiungiamo le chiamate alla funzione:

javascriptlet num = 1; // in questo momento la funzione scopre che num = 1
func(); // visualizzerà 1

function func() {
  console.log(num);
}

func(); // visualizzerà 1
num = 2; // in questo momento la funzione scopre che num = 2
func(); // visualizzerà 2

Ripeto: in realtà la funzione conosce i valori delle variabili esterne, anche senza essere chiamata.