JavaScript Hoisting (Ko'tarilish)
Hoisting — bu JavaScript-ning o'zgaruvchilar va funksiyalarni e'lon qilinishini o'z sohasining eng yuqori qismiga ko'chirish haqidagi standart harakatidir.
E'lonlarning Ko'tarilishi
JavaScript-da o'zgaruvchini ishlatganingizdan keyin uni e'lon qilishingiz mumkin. Boshqacha aytganda: o'zgaruvchidan u hali e'lon qilinmasdan oldin foydalanish imkoniyati mavjud.
Misol 1
x = 5; // x ga 5 biriktiriladi
elem = document.getElementById("demo");
elem.innerHTML = x; // x ko'rsatiladi
var x; // x e'lon qilinadiBu kod xuddi o'zgaruvchi tepada e'lon qilingandek ishlaydi.
Misol 2
var x; // x e'lon qilinadi
x = 5; // x ga 5 biriktiriladi
elem = document.getElementById("demo");
elem.innerHTML = x;Yuqoridagi ikki misol ham bir xil natija beradi.
JavaScript barcha e'lonlarni (declarations) joriy sohaning (script yoki funksiyaning) eng tepasiga olib chiqadi.
let va const Kalit So'zlari va Hoisting
let va const bilan e'lon qilingan o'zgaruvchilar ham ko'tariladi, lekin ular initsializatsiya qilinmaydi.
Bu degani: kod bloki o'zgaruvchidan xabardor, lekin u e'lon qilinmaguncha foydalanib bo'lmaydi. Agar siz let o'zgaruvchisini u e'lon qilinmasidan oldin ishlatsangiz, ReferenceError xatoligi yuz beradi.
O'zgaruvchi blok boshidan e'lon qilinguncha "vaqtinchalik o'lik zona" (temporal dead zone)da bo'ladi.
Misol (Xatolik)
carName = "Volvo"; // ReferenceError qaytaradi
let carName;Initsializatsiyalar Ko'tarilmaydi
JavaScript faqat e'lonlarni (declarations) ko'taradi, lekin qiymat biriktirishlarni (initializations) emas.
Misol 1
var x = 5; // x initsializatsiya qilindi
var y = 7; // y initsializatsiya qilindi
elem.innerHTML = x + " " + y; // "5 7" chiqadiMisol 2
var x = 5; // x initsializatsiya qilindi
elem.innerHTML = x + " " + y; // "5 undefined" chiqadi
var y = 7; // y initsializatsiya qilindiMisol 2 da y ning undefined bo'lib qolishiga sabab: faqat var y e'loni tepaga ko'tarilgan, lekin = 7 (qiymat) joyida qolib ketgan.
O'zgaruvchilarni Har Doim Tepada E'lon Qiling!
Dasturchilar ko'pincha hoisting haqida unutiladi yoki hayollaridan ko'tariladi. Bu esa kutilmagan bug (xato)larga sabab bo'lishi mumkin.
Xatolarni oldini olish uchun har doim o'zgaruvchilarni har bir sohaning (scope) eng boshida e'lon qilishni odat qiling.
Maslahat
JavaScript-ning "Strict Mode" (qat'iy rejim)i e'lon qilinmagan o'zgaruvchilarni ishlatishga ruxsat bermaydi. Shuning uchun keyingi bo'limda ushbu rejimni o'rganish juda muhim.
Xulosa
- Hoisting: E'lonlarni soha tepasiga ko'chirish.
var— ko'tariladi vaundefinedqiymatiga ega bo'ladi.letvaconst— ko'tariladi, lekin ishlatib bo'lmaydi (xatolik beradi).- Faqat e'lonlar ko'tariladi, qiymatlar emas.
- Toza kod yozish uchun o'zgaruvchilarni tepada e'lon qiling.
