Globalne promenljive u funkcijama u JavaScriptu

U JavaScriptu (u drugim jezicima najčešće nije tako) promenljive definisane izvan funkcije biće vidljive unutar te funkcije. Takve promenljive nazivaju se globalnim. Pogledajmo na primeru:

javascriptlet num = 1; // promenljiva izvan funkcije

function func() {
  console.log(num); // promenljiva num je vidljiva unutar funkcije
}

func(); // ispisaće 1

Zapravo, promenljiva mora biti definisana ne pre definicije funkcije, već pre njenog poziva:

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

let num = 1; // promenljiva izvan funkcije
func();      // ispisaće 1

Ako menjamo vrednost promenljive i nakon toga svaki put pozivamo funkciju - console.log će svaki put ispisivati različite rezultate:

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

let num; // deklarišemo promenljivu

num = 1; // postavljamo vrednost 1
func();  // ispisaće 1

num = 2; // postavljamo vrednost 2
func();  // ispisaće 2

Ako imamo više funkcija, onda će globalna promenljiva biti dostupna u svakoj od tih funkcija:

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

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

let num = 1;

func1(); // ispisaće 1
func2(); // ispisaće 1

Ako se u jednoj od funkcija dese promene globalne promenljive, onda će se ta promenljiva promeniti u svim funkcijama koje koriste tu promenljivu:

javascriptfunction func1() {
  console.log(num);
  num++; // menjamo globalnu promenljivu
}

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

let num = 1;

func1(); // ispisaće 1
func2(); // ispisaće 2

Pošto bilo koja funkcija lako može promeniti globalnu promenljivu, njihovo korišćenje predstavlja rasadnik teško uočljivih grešaka. Iz tog razloga, korišćenje globalnih promenljivih u skriptu treba svesti na minimum. Poželjno je da ih uopšte nema ili da ih ima najmanji mogući broj.

Задание 1

Odredite, bez pokretanja koda, šta će biti ispisano u konzoli:

javascriptlet num = 1;
    
function func() {
  console.log(num);
}

func();
Задание 2

Odredite, bez pokretanja koda, šta će biti ispisano u konzoli:

javascriptlet num = 1;
    
function func() {
  console.log(num);
}

num = 2;
func();
Задание 3

Odredite, bez pokretanja koda, šta će biti ispisano u konzoli:

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

let num;

num = 1;
func();

num = 2;
func();