Tillgång till externa variabler i funktioner i JavaScript

Låt oss betrakta följande kod:

javascriptlet num = 1; // sätter variabelns värde

function func() {
  console.log(num); // skriver ut det till konsolen
}

func(); // anropar funktionen

Som jag nämnt tidigare behöver variabelns värde inte nödvändigtvis vara före definitionen av funktionen, huvudsaken är att det står före dess anrop:

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

let num = 1;
func();

Egentligen är det inte riktigt så. Vår funktion känner till variabelns värde num även före sitt eget anrop:

javascriptlet num = 1;

function func() {
  console.log(num); // funktionen vet redan att num = 1
}

Här är ett mer komplext exempel:

javascriptlet num = 1; // funktionen får i detta ögonblick veta att num = 1

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

num = 2; // funktionen får i detta ögonblick veta att num = 2

Låt oss lägga till funktionsanrop:

javascriptlet num = 1; // funktionen får i detta ögonblick veta att num = 1
func(); // skriver ut 1

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

func(); // skriver ut 1
num = 2; // funktionen får i detta ögonblick veta att num = 2
func(); // skriver ut 2

Återigen: funktionen känner faktiskt till värdena för externa variabler, även utan att ha anropats.