Skip to content

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

js
x = 5; // x ga 5 biriktiriladi
elem = document.getElementById("demo");
elem.innerHTML = x; // x ko'rsatiladi

var x; // x e'lon qilinadi

Bu kod xuddi o'zgaruvchi tepada e'lon qilingandek ishlaydi.

Misol 2

js
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)

js
carName = "Volvo"; // ReferenceError qaytaradi
let carName;

Initsializatsiyalar Ko'tarilmaydi

JavaScript faqat e'lonlarni (declarations) ko'taradi, lekin qiymat biriktirishlarni (initializations) emas.

Misol 1

js
var x = 5; // x initsializatsiya qilindi
var y = 7; // y initsializatsiya qilindi

elem.innerHTML = x + " " + y; // "5 7" chiqadi

Misol 2

js
var x = 5; // x initsializatsiya qilindi

elem.innerHTML = x + " " + y; // "5 undefined" chiqadi

var y = 7; // y initsializatsiya qilindi

Misol 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 va undefined qiymatiga ega bo'ladi.
  • let va const — 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.