JavaScriptda funktsiyalarda global o'zgaruvchilar

JavaScriptda (boshqa tillarda ko'pincha bunday emas) funksiyadan tashqarida aniqlangan o'zgaruvchilar ushbu funksiya ichida ko'rinadi. Bunday o'zgaruvchilar global deb ataladi. Keling, misol orqali ko'ramiz:

javascriptlet num = 1; // funksiyadan tashqaridagi o'zgaruvchi

function func() {
  console.log(num); // num o'zgaruvchisi funksiya ichida ko'rinadi
}

func(); // 1 ni chiqaradi

Aslida o'zgaruvchi funksiya aniqlanishidan oldin emas, balki uning chaqirilishidan oldin aniqlanishi kerak:

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

let num = 1; // funksiyadan tashqaridagi o'zgaruvchi
func();      // 1 ni chiqaradi

Agar o'zgaruvchining qiymatini o'zgartirsak va shundan so'ng har safar funksiyani chaqirsak - console.log har safar turli natijalarni chiqaradi:

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

let num; // o'zgaruvchini e'lon qilamiz

num = 1; // qiymatini 1 qilib belgilaymiz
func();  // 1 ni chiqaradi

num = 2; // qiymatini 2 qilib belgilaymiz
func();  // 2 ni chiqaradi

Agar bizda bir nechta funksiyalar bo'lsa, global o'zgaruvchi ushbu funksiyalarning har birida mavjud bo'ladi:

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

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

let num = 1;

func1(); // 1 ni chiqaradi
func2(); // 1 ni chiqaradi

Agar funksiyalarning birida global o'zgaruvchi bilan o'zgartirishlar sodir bo'lsa, u holda bu o'zgaruvchi ushbu o'zgaruvchidan foydalanadigan barcha funksiyalarda o'zgaradi:

javascriptfunction func1() {
  console.log(num);
  num++; // global o'zgaruvchini o'zgartiramiz
}

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

let num = 1;

func1(); // 1 ni chiqaradi
func2(); // 2 ni chiqaradi

Funksiyalarning istalgani osongina global o'zgaruvchini o'zgartirishi mumkin bo'lgani uchun, ularning ishlatilishi aniqlashtirish qiyin bo'lgan xatolar manbai hisoblanadi. Shu sababli skriptda global o'zgaruvchilardan foydalanish minimal darajada cheklanishi kerak. Ularning umuman bo'lmasligi yoki eng kam miqdorda bo'lishi maqsadga muvofiqdir.

Задание 1

Kodni ishlamasdan, konsolda nima chiqishini aniqlang:

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

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

Kodni ishlamasdan, konsolda nima chiqishini aniqlang:

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

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

Kodni ishlamasdan, konsolda nima chiqishini aniqlang:

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

let num;

num = 1;
func();

num = 2;
func();