Global obyekt
Global obyekt โ tilning butun dastur bo'ylab mavjud bo'lgan o'zgaruvchi va funksiyalarni saqlaydigan maxsus obyekt. U tarixiy sabablarga ko'ra turli muhitlarda turlicha nomlanadi, endi esa yagona standart nom bor: globalThis.
Global obyekt nima?
Global obyekt tilning eng "tashqi" muhitini ifodalaydi. Unda beriladigan xususiyatlar dasturning istalgan joyidan ko'rinadi. Uning nomi muhitga bog'liq:
- Brauzerda โ
window; - Node.js'da โ
global; - Boshqa muhitlarda โ yana boshqacha bo'lishi mumkin.
Bu farqlar kodni bir muhitdan ikkinchisiga ko'chirishni qiyinlashtirardi. Shu sabab standart yagona nom kiritildi.
globalThis โ yagona standart nom
globalThis โ global obyektga murojaat qilishning zamonaviy, standart usuli. U barcha muhitlarda ishlaydi: brauzer, Node.js va boshqalarda. Endi muhitni tekshirib o'tirish shart emas:
window yoki global ni tekshirishga majbur edi. globalThis bu muammoni butunlay hal qildi โ yangi kodda faqat shu nomni ishlating.globalThis aynan global ga, brauzerda esa window ga teng. Ya'ni globalThis === global (Node.js'da) rost qaytaradi.Global funksiya va o'zgaruvchilar
Ba'zi funksiyalar til tomonidan har joyda tayyor beriladi โ ular ham amalda global obyekt orqali mavjud. Masalan parseInt, setTimeout, isNaN va boshqalar:
var orqali eng tashqi (skript) darajasida e'lon qilingan o'zgaruvchi window obyektiga xususiyat sifatida qo'shilib qolardi. let/const esa bunday qilmaydi. Bu ham let/const afzalligining yana bir sababi.Global obyektdan qanday to'g'ri foydalanish
Odatda global obyektga qo'lda qiymat qo'shish tavsiya etilmaydi. Ammo ba'zan haqiqatan kerak bo'ladi โ masalan, butun ilova uchun bitta muhim sozlama yoki o'zgaruvchi kerak bo'lganda. Bunday holda uni ochiq-oydin globalThis orqali qo'shish tavsiya etiladi:
Nega global o'zgaruvchidan qochish kerak?
Global o'zgaruvchilar qulay ko'rinadi โ ular har joyda mavjud. Lekin aynan shu "har joyda mavjudlik" jiddiy muammolar tug'diradi:
- Nom to'qnashuvi โ ikki turli qism bir xil global nomni ishlatib, bir-birining qiymatini bilmasdan buzib qo'yishi mumkin;
- Yashirin bog'liqlik โ funksiya global o'zgaruvchiga bog'lansa, uni tushunish qiyinlashadi: kirish argumentlaridan uning nimaga bog'liqligi ko'rinmaydi;
- Test qilish qiyinlashadi โ global holatga bog'liq kodni alohida sinash mushkul;
- Kuzatib bo'lmaydigan o'zgarishlar โ dasturning istalgan joyi global qiymatni o'zgartirishi mumkin, xatoni topish qiyinlashadi.
To'g'ri yondashuv โ ma'lumotni argument orqali uzatish va funksiya qiymatini qaytarish. Solishtiring:
Xulosa
- Global obyekt โ butun dastur bo'ylab mavjud o'zgaruvchi va funksiyalarni saqlaydi;
- Uning nomi muhitga bog'liq: brauzerda
window, Node.js'daglobal; globalThisโ barcha muhitlarda ishlaydigan yagona standart nom, yangi kodda shuni ishlating;parseInt,setTimeoutkabi global funksiyalar hamma joyda tayyor;- Global o'zgaruvchidan qoching โ ma'lumotni argument va return orqali uzatish ancha xavfsiz va tushunarli.