Funksiyalar bilan chuqur ishlash

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:

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:

globalthis.js
// natija shu yerda chiqadi
Ilgari kod har bir muhit uchun alohida window yoki global ni tekshirishga majbur edi. globalThis bu muammoni butunlay hal qildi โ€” yangi kodda faqat shu nomni ishlating.
Node.js muhitida 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:

global-funcs.js
// natija shu yerda chiqadi
Muhim tafsilot: brauzerda 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:

global-config.js
// natija shu yerda chiqadi
Bunday holatlar juda kam bo'lishi kerak. Ko'p hollarda ma'lumotni funksiyalarga argument sifatida uzatish yoki modullar orqali ulashish ancha toza yechim.

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:

To'g'ri yondashuv โ€” ma'lumotni argument orqali uzatish va funksiya qiymatini qaytarish. Solishtiring:

global-vs-args.js
// natija shu yerda chiqadi
Umumiy qoida: o'zgaruvchini imkon qadar tor ko'lamda saqlang. Faqat funksiya ichida kerak bo'lsa โ€” lokal qiling; bir necha funksiya ulashsa โ€” modulda; global esa deyarli hech qachon. Bu kodni ishonchli va tushunarli qiladi.

Xulosa