JavaScript да функциялардаги глобал ўзгарувчилар

JavaScript да (бошқа тилларда кўпинчак бундай эмас) функциядан ташқарида аниқланган ўзгарувчилар ушбу функция ичида кўринадиган булади. Бундай ўзгарувчилар глобал деб аталади. Мисолда кўрамиз:

javascriptlet num = 1; // функциядан ташқаридаги ўзгарувчи

function func() {
  console.log(num); // ўзгарувчи num функция ичида кўринади
}

func(); // 1 ни чиқаради

Аслича ўзгарувчи функциянинг аниқланишидан эмас, балки унинг чақирилишидан олдин аниқланган булиши керак:

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

let num = 1; // функциядан ташқаридаги ўзгарувчи
func();      // 1 ни чиқаради

Агар ўзгарувчининг қийматини ўзгартириб, шундан сўнг ҳар сафар функцияни чақирсак - console.log ҳар сафар турли натижаларни чиқаради:

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

let num; // ўзгарувчини эълон қиламиз

num = 1; // қийматини 1 деб белгилаймиз
func();  // 1 ни чиқаради

num = 2; // қийматини 2 деб белгилаймиз
func();  // 2 ни чиқаради

Агар бизда бир нечта функция бўлса, у ҳолда глобал ўзгарувчи ушбу функцияларнинг ҳар бирида мумкин бўлади:

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

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

let num = 1;

func1(); // 1 ни чиқаради
func2(); // 1 ни чиқаради

Агар функцияларнинг бирида глобал ўзгарувчи билан ўзгартиришлар юз берса, у ҳолда ушбу ўзгарувчи уни ишлатаётган барча функцияларда ўзгаради:

javascriptfunction func1() {
  console.log(num);
  num++; // глобал ўзгарувчини ўзгартирамиз
}

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

let num = 1;

func1(); // 1 ни чиқаради
func2(); // 2 ни чиқаради

Функцияларнинг истагани осонлик билан глобал ўзгарувчини ўзгартира олгани сабабли, уларнинг ишлатилиши қийин аникланадиган хатолар манбаига айланиб қолади. Шу сабабдан скриптда глобал ўзгарувчиларни ишлатиш имкони борича чеклаш керак. Умман, уларнинг умуман бўлмаслиги ёки жуда кам миқдорда бўлиши мақсадга мувофикдир.

Задание 1

Кодни ишлатмасдан, консолда нима чиқаришини аниқланг:

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

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

Кодни ишлатмасдан, консолда нима чиқаришини аниқланг:

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

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

Кодни ишлатмасдан, консолда нима чиқаришини аниқланг:

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

let num;

num = 1;
func();

num = 2;
func();