Globaalsed muutujad funktsioonides JavaScriptis

JavaScriptis (enamikus teistes keeltes enamasti mitte nii) on funktsioonist väljaspool määratletud muutujad nähtavad selle funktsiooni sees. Selliseid muutujaid nimetatakse globaalseteks. Vaatame näidet:

javascriptlet num = 1; // muutuja funktsioonist väljaspool

function func() {
  console.log(num); // muutuja num on nähtav funktsiooni sees
}

func(); // väljastab 1

Tegelikult peab muutuja olema defineeritud mitte enne funktsiooni defineerimist, vaid enne selle kutsumist:

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

let num = 1; // muutuja funktsioonist väljaspool
func();      // väljastab 1

Kui muuta muutuja väärtust ja pärast seda iga kord funktsiooni välja kutsuda - console.log väljastab iga kord erineva tulemuse:

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

let num; // deklareerime muutuja

num = 1; // määrame väärtuseks 1
func();  // väljastab 1

num = 2; // määrame väärtuseks 2
func();  // väljastab 2

Kui meil on mitu funktsiooni, siis globaalne muutuja on ligipääsetev igas neist funktsioonidest:

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

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

let num = 1;

func1(); // väljastab 1
func2(); // väljastab 1

Kui ühes funktsioonidest muudetakse globaalset muutujat, siis see muutuja muutub kõigis funktsioonides, mis kasutavad seda muutujat:

javascriptfunction func1() {
  console.log(num);
  num++; // muudame globaalset muutujat
}

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

let num = 1;

func1(); // väljastab 1
func2(); // väljastab 2

Kuna ükskõik milline funktsioonidest võib hõlpsasti muuta globaalset muutujat, siis nende kasutamine esindab endas raskesti tabavaid vigu. Sel põhjusel tuleks globaalsete muutujate kasutamist skriptis minimeerida. Soovitav on, et neid üldse ei oleks või oleks kõige minimaalsem kogus.

Задание 1

Määrake, ilma koodi käivitamata, mis väljastatakse konsooli:

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

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

Määrake, ilma koodi käivitamata, mis väljastatakse konsooli:

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

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

Määrake, ilma koodi käivitamata, mis väljastatakse konsooli:

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

let num;

num = 1;
func();

num = 2;
func();