O’zgaruvchi e’lon qilinishidan oldin ishlatilsa nima bo’ladi?
Agar o’zgaruvchi var
bilan e’lon qilingan bo’lsa unda uning qiymati undefined
bo’ladi.
Agar o’zgaruvchi let
yoki const
bilan e’lon qilingan bo’lsa ReferenceError
xatoligi kelib chiqadi.
Nega bu holatda var
va let
/const
farq qiladi?
Ko’pchilik bu holatni hoisting bilan bog’liq va let
/const
hoisting qilinmaydi deb o'ylashadi va bu noto’gri.
let
/const
o'zgaruvchilari ham var
o'zgaruvchilari kabi hoisting qilinadi. Asosiy farq shundaki var
o'zgaruvchilari hoisting qilinganda ularga boshlang'ich qiymat sifatida undefined
beriladi. Ammo let
/const
o'zgaruvchilari hoisting qilinganida ularga boshlang'ich qiymat berilmaydi.
Bunga sabab const
o'zgaruvchilariga e'lon qilingandagina qiymat beriladi va qayta qiymat o'zlashtirib bo'lmaydi, ya'ni const
o'zgaruvchilari faqatgina bir dona qiymatni o'zida saqlay oladi, shu sababdan ularga boshlang'ich qiymat sifatida undefined
berilishi notog'ri bo'ladi. Shuning uchun const
bilan e'lon qilingan o'zgaruvchilar e'lon qilinishidan oldin ishlatilganda o'zgaruvchining hech qanday qiymati yo'q bo'lgani uchun xatolik kelib chiqadi (ReferenceError
). let
da bunday mu’ammo bo’lmasada u ham const
kabi ishlaydi.
O’zgaruvchi ishlatilishi mumkun bo’lgan scope
da u e’lon qilingungacha bo’lgan hudud “vaqtinchalik o’lik hudud” (temporal dead zone - TDZ) deb nomlanadi.
"TDZ" da let
/const
oz'garuvchilari mavjudligi ma'lum bo'ladi, ammo ularni ishlatib bo'lmaydi.