JS da hoisting
JavaScript’da kod ishga tushirilganda u to‘g‘ridan-to‘g‘ri bajarilmaydi. Eng avvalo JavaScript engine tomonidan Execution Context yaratiladi. Execution Context — bu kod qanday muhitda va qanday qoidalarga asoslanib bajarilishini belgilab beruvchi mexanizm bo‘lib, u ikki bosqichdan iborat: Creation Phase va Execution Phase.
Dastlab Creation Phase ishga tushadi. Bu bosqichda kod hali bajarilmaydi, aksincha JavaScript engine kodni bajarishga tayyorlaydi. Aynan shu jarayonda hoisting mexanizmi ishlaydi. Hoisting vaqtida o‘zgaruvchilar va funksiyalar uchun xotirada joy ajratiladi hamda this kalit so‘zining qiymati aniqlanadi. Muhim jihati shundaki, bu bosqichda qiymatlar emas, balki faqat o‘zgaruvchilar va funksiyalarning nomlari xotiraga yoziladi. Shu sababli kod realda tepaga ko‘chirilgandek tuyuladi, lekin aslida faqat deklaratsiyalar oldindan tayyorlab qo‘yiladi. Mana shu jarayon hoisting deb ataladi.
Get Ruzmatboy Jumaniyozov’s stories in your inbox
Join Medium for free to get updates from this writer.
Hoisting mexanizmi bilan bevosita bog‘liq bo‘lgan muhim tushunchalardan biri — Temporal Dead Zone (TDZ) hisoblanadi. let va const bilan e’lon qilingan o‘zgaruvchilar hoisting jarayonida xotiraga yoziladi, biroq ular TDZ ichida bo‘ladi. TDZ — bu scope boshlangan paytdan o‘zgaruvchi e’lon qilingan joygacha bo‘lgan vaqt oralig‘i bo‘lib, shu oraliqda o‘zgaruvchiga murojaat qilish taqiqlanadi. Agar shu vaqtda o‘zgaruvchini ishlatishga urinsak, JavaScript ReferenceError chiqaradi. Bu mexanizm xatoni erta aniqlash va kodni yanada xavfsiz qilish uchun joriy qilingan.
var bilan e’lon qilingan o‘zgaruvchilar esa boshqacha ishlaydi. Ular hoisting jarayonida darhol undefined qiymati bilan xotiraga yoziladi va shu sababli e’lon qilinishidan oldin chaqirilsa ham error bermaydi. Biroq bu holat mantiqiy jihatdan noto‘g‘ri natijalarga olib kelishi va yashirin xatolarni yuzaga chiqarishi mumkin. Aynan shu sababli var debugging jarayonini qiyinlashtiradi va zamonaviy JavaScript’da undan foydalanish tavsiya etilmaydi.
JavaScript’da funksiyalarda hoisting jarayoni quyidagicha ishlaydi:
Function declaration to‘liq hoist bo‘ladi, ya’ni Creation Phase vaqtida funksiya to‘liq xotiraga yoziladi va e’lon qilinishidan oldin ham chaqirilishi mumkin.
Function expression va arrow functionlar esa to‘liq hoist bo‘lmaydi, chunki ular o‘zgaruvchiga biriktirilgan holda e’lon qilinadi va ularning ishlashi o‘sha o‘zgaruvchining hoisting qoidalariga bog‘liq bo‘ladi.








