JavaScript dasturlash tilida scope tushunchasi va ularning turlari
Mirzo Ulug'bek
Scope nima ?
Keling avval scope nima ekanligini tushunib olsak, scope - bu qiyin narsa emas. Unda nima axir deyishingiz mumkin. Hozir tushuntiraman. JavaScript dasturlash tilini o'rganar ekansiz { } - ushbu belgini ko'rgansiz bu belgi o'zbek tilida "jingalak qavslar", ingliz tilida "curly braces", rus tilida "фигурные скобки", qozoq tilida "бұйра жақшалар" deyiladi. Quyida rasm keltiraman faqat adashtirib yubormang bu Gitlerning mo'ylabi(mo'ylavi) emas. "Mashu narsaning ichi, tashi emas ichi scope deyilar ekanda-a, tushundim, tushunarli" - degandursiz ichingizda, yaxshi keling chuqurlashamiz.

Scope nima ekanligini bilib olgan bo'lsangiz unda boshladik.
Bismillah
Java, Python, Ruby, Golang, C, C++, C#, Dart, Rust dasturlash tillarida scopelarning qanday turlari borligini bilmadim-u, lekin JavaScript dasturlash tilida scopelarning 3 turdagisi mavjud.
Scope turlari
- Global scope
- Function scope (Function scopeni erkalatib Local scope deb ham atashadi)
- Block scope
Global scope
Siz hech qanday scope yaratmasdan kod yozadigan bo'lsangiz, masalan o'zgaruvchi yaratadigan bo'lsangiz shuni bilingki siz Global scope ichida turibsiz. Yaratgan o'zgaruvchingiz ham Global scope ichida.

"Iyaa saal g'alatiroomisiz? bu yerda { }ni ko'rmayapman-ku siz o'zingiz aytdingiz
{ }ning ichi scope deyiladi deb. Bu yerda esa u yo'q" - deb aytishingiz mumkin ha yo'q, men ham ko'rmayapman. U berkinib olganmikin, albatta hazil:) bu shunchaki hazil JavaScriptda barcha kodlar Global scope ichida bo'ladi, uni JavaScriptning o'zi tabiiy holatda yaratib qo'ygan. Demak takrorlab olamiz, agar biz scope yaratmasak demak biz Global scope ichidamiz.
Function scope

Funksiyaga tegishli bo'lgan { }lar Function scope deyiladi. Funksiyaning har qanday turi bo'lsa ham, function declaration, function expression xattoki arrow function bo'lsa ham funksiyaga tegishli { }mi? bo'ldi Erik Haydar aytganidek "uyidi, buyidi" ketmaydi. Demak funksiyaga tegishli { }ni ko'rsak u Function scope(Local scope) bo'ladi. Yuqorida aytib o'tdim Function scopeni erkalatib Local scope deb ham chaqirishadi.
Block scope
Shunchaki o'zimizga ichki scope kerak bo'ladigan bo'lsa { }ni ochib kod yozadigan bo'lsak biz Block scope ichida kod yozgan bo'lamiz.

Undan tashqari bular ham Block scope hisoblanadi (rasmlarga qarang)

Umuman olganda scope, Global scope va Function scope(Local scope) bo'lmasa demak u Block scope. Juda ham oson.
O'zgaruvchilarning scopelarda ishlashi
Agar o'zgaruvchi Global scopeda bo'lsa, uni e'lon qilingan joydan keyingi qatorlarda istalgancha joyda, istalgancha ishlata olamiz.

Bu yerda scope yo'q demak biz Global scopedamiz.

Agar o'zgaruvchilar Function scope(Local scope)da bo'lsa, ular faqatgina shu scope ichida ishlaydi. Agar o'zgaruvchi var bilan e'lon qilingan bo'lsachi?
Umuman farqi yo'q var Block scopeni tanimaydi holos Function scope(Local scope)ni esa o'zidan ham yaxshiroq taniydi, shuning uchun ishlamaydi.

Agar o'zgaruvchilar Block scopeda bo'lsachi, unda ham faqat shu Block scope ichida ishlaydi, agar o'zgaruvchi var bilan e'lon qilingan bo'lmasa, chunki var Block scopeni tan olmaydi. Modul scope ham bor desam nima deysiz faqat u haqida keyinroq.