Men ko'plab ishlab chiquvchilarni ko'raman, ular ishda har kuni foydalanishsa ham, qamrov nima ekanligini bilmaydilar. Men "ko'lam" atamasini soddalashtirishga va sizga ushbu muhim atama haqida yaxshi tushuncha berishga qaror qildim.

Qo'llash sohalari

Biz 4 turdagi doiralarni ko'rib chiqamiz.

Mahalliy qamrov

Muayyan funktsiya ichidagi har qanday o'zgaruvchilar yoki funktsiyalar ma'lum bir funktsiyaning mahalliy doirasi deb ataladi.

function localScope(){
  var name="David"; //Local scope of the function.
}

Funktsiya doirasi

Har qanday funktsiya o'z doirasiga ega - bu nimani anglatadi? Bu shuni anglatadiki, ma'lum bir funktsiya ichidagi barcha o'zgaruvchilar yoki funktsiyalar tashqi funktsiyalar uchun ochiq/ko'rinmaydi, ular funktsiya uchun mahalliydir.

//The variable 'name' can't be used here.
function innerScope(){
  //Start of function scope
  var name = "David";
  //Local scope.
  console.log(name); //Will print to the console "David".
  //End of function scope.
}
//The variable 'name' can't be used here.

Yuqoridagi misolda siz name oʻzgaruvchisi funksiya doirasida ekanligini koʻrishingiz mumkin. name oʻzgaruvchisiga faqat funksiyaning oʻzidan kirish mumkin va tashqaridagi boshqa funksiyalarga koʻrinmaydi, masalan:

function innerScope(){ 
  var name = "David";
}
console.log(name); //Error, Uncaught ReferenceError: name is not defined

console.log(name) ni bajarish orqali biz Uncaught ReferenceError: name is not defined xatosini olamiz. Bu name o'zgaruvchisi funksiya doirasida bo'lmagani uchun sodir bo'ladi.

Global qamrov

Ushbu turdagi qamrov o'zgaruvchilar har qanday funktsiyadan tashqarida e'lon qilinganda. Shunday qilib, har qanday funktsiya ushbu o'zgaruvchidan foydalanishi mumkin. Bu shunday o'zgaruvchilarni Global Scopeda mavjud bo'lishiga olib keladi.

O'zgaruvchi global bo'lsa, uni kodingizning istalgan joyidan foydalanishingiz mumkin.

var name="David"; //Global scope.
//The 'name' variable can be used here.
function printNameFromGlobalScope(){
  console.log(name); //Will print to the console "David".
}
//The 'name' variable can be used here.

Yuqoridagi misolda ko'rib turganingizdek, name o'zgaruvchisi printNameFromGlobalScope() funksiyasidan tashqarida e'lon qilingan va shuning uchun u funktsiya ichida e'lon qilinmagan bo'lsa ham, biz unga kirish huquqiga egamiz. Bu mumkin, chunki u global miqyosda e'lon qilingan.

Kengaytirilgan maslahat

Agar mahalliy o'zgaruvchi va global o'zgaruvchi bir xil nomga ega bo'lsa, ular bir-birini bekor qilmaydi.

var name="David"; //Global scope.
function printName(){
  var name="Arik"; //Local scope.
  console.log(name); //Will print to the console "Arik".
}
console.log(name); //Will print to the console "David".

Avtomatik global

Biz o'tadigan so'nggi qamrov turi avtomatik ravishda globaldir.

Avtomatik ravishda global qamrov ma'lum bir funktsiyada hech qachon e'lon qilinmagan o'zgaruvchiga tayinlashni o'z ichiga olgan funktsiyaga qo'ng'iroq bo'lganda sodir bo'ladi.

function print automaticallyGlobalName(){
  name="David"; //No let, var or const before assignment a value.
  console.log(name); //Will print to the console "David".
}
automaticallyGlobalName();
console.log(name); //Will print to the console "David".

Yuqoridagi misol kodidagi qadamga e'tibor bering. Birinchidan, funktsiya e'lon qilinadi. Ikkinchidan, hech qachon e'lon qilinmagan o'zgaruvchiga tayinlanish mavjud. Uchinchidan, biz ushbu funktsiyani chaqirdik. Nihoyat, biz name o'zgaruvchini chop qilamiz.

Uchinchi qadam muhim, chunki agar biz bu bosqichni o'tkazib yuborsak, biz undefined ni olamiz. Buning sababi, agar biz undan o'tmasa, name ni global miqyosga qo'sha olmaymiz. Shunday qilib, biz automaticallyGlobalName funksiyasini chaqirganimizda, kompilyator name o'zgaruvchisi hech qachon e'lon qilinmasligini sezadi va uni global qamrovga qo'shadi.

Hozirgacha o'qiganingiz uchun raxmat, agar sizga bunday kontent yoqsa va menga dasturchi va yozuvchi sifatida shu kabi maqolalarni ko'proq yozishimga yordam bermoqchi bo'lsangiz, iltimos, imzo qo'ying. Mening havolam bilan Medium aʼzosi sifatida (oyiga $5 USD obuna) va siz Medium’dagi hamma narsadan cheksiz foydalanish huquqiga ega boʻlasiz.

Hozircha shu, maqola sizga yoqdi degan umiddaman.

Yana qiziqarli va foydali maqolalar uchun meni kuzatib boring.

Ko'proq kontent PlainEnglish.io sahifasida. Bizning bepul haftalik axborot byulletenimizga obuna bo'ling. Bizni Twitter va LinkedInda kuzatib boring. Bizning “Hamjamiyat kelishmovchiligi”ni tekshiring va “Iste’dodlar jamoasi”ga qo‘shiling.