Globaalit muuttujat funktioissa JavaScriptissä

JavaScriptissä (useimmissa muissa kielissä yleensä ei näin) funktion ulkopuolella määritellyt muuttujat ovat näkyvissä funktion sisällä. Such variables are called globaaleja muuttujia. Katsotaan esimerkkiä:

javascriptlet num = 1; // muuttuja funktion ulkopuolella

function func() {
  console.log(num); // muuttuja num näkyy funktion sisällä
}

func(); // tulostaa 1

Itse asiassa muuttujan on oltava määritelty ei ennen funktion määrittelyä, vaan ennen sen kutsua:

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

let num = 1; // muuttuja funktion ulkopuolella
func();      // tulostaa 1

Jos muutat muuttujan arvoa ja sen jälkeen kutsumme funktiota joka kerta - console.log tulostaa eri tulokset joka kerta:

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

let num; // määritellään muuttuja

num = 1; // asetetaan arvoksi 1
func();  // tulostaa 1

num = 2; // asetetaan arvoksi 2
func();  // tulostaa 2

Jos meillä on useita funktioita, globaali muuttuja on saatavilla jokaisessa näistä funktioista:

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

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

let num = 1;

func1(); // tulostaa 1
func2(); // tulostaa 1

Jos yhdessä funktioista tapahtuu muutoksia globaaliin muuttujaan, tämä muuttuja muuttuu kaikissa muuttujaa käyttävissä funktioissa:

javascriptfunction func1() {
  console.log(num);
  num++; // muutetaan globaalia muuttujaa
}

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

let num = 1;

func1(); // tulostaa 1
func2(); // tulostaa 2

Koska mikä tahansa funktioista voi helposti muuttaa globaalia muuttujaa, niiden käyttö edustaa hedelmällistä maaperää vaivihkaisille virheille. Tästä syystä globaalien muuttujien käyttöä skriptissä tulisi vähentää minimiin. On toivottavaa, että niitä ei olisi ollenkaan tai olisi vain minimaalinen määrä.

Задание 1

Päätä, suorittamatta koodia, mitä tulostetaan konsoliin:

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

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

Päätä, suorittamatta koodia, mitä tulostetaan konsoliin:

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

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

Päätä, suorittamatta koodia, mitä tulostetaan konsoliin:

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

let num;

num = 1;
func();

num = 2;
func();