Sep 14, 2024
javascript
JavaScriptda TDZ (Temporal Dead Zone) va hoisting xususiyatlari o‘zgaruvchilarni qanday boshqarilishi va ularga qachon kirishish mumkinligini belgilaydi. Bu tushunchalar asosan var, let va const bilan bog‘liq. Keling, har birini batafsil tushuntirib o‘tamiz va bloklar bilan qanday ishlashini ko‘rib chiqamiz.

1. Hoisting
Hoisting bu JavaScriptning o‘zgaruvchilar va funksiyalarni aniqlanishidan oldin ko‘tarish xususiyatidir. Bu xususiyat tufayli o‘zgaruvchilar yoki funksiyalarni ularni aniqlashdan oldin ham chaqirishga imkon beradi.

var bilan hoisting
var yordamida aniqlangan o‘zgaruvchilar hoisting qilinadi. Bu o‘zgaruvchilarni deklaratsiyasi avtomatik ravishda kodning yuqorisiga ko‘tariladi, lekin ularning qiymati undefined bo‘ladi, chunki ular faqat dastur bajarilayotganda qiymat oladi.
- Misol:
console.log(x); // undefined
var x = 5;
console.log(x); // 5
Bu misolda x o‘zgaruvchisi hoisting qilinadi, lekin x ga qiymat berilmagani uchun dastlab undefined bo‘ladi.
- Blokda
var:varning yana bir xususiyati shundaki, u blok scopingga rioya qilmaydi, ya’ni funksiyaning ichida aniqlangan bo‘lsa ham global ko‘lamda mavjud bo‘ladi.
if (true) {
var y = 10;
}
console.log(y); // 10
Bu yerda y global bo‘lib qoldi, chunki var blok scopingni hisobga olmaydi.
let va const bilan hoisting
let va const ham hoisting qilinadi, lekin ularga Temporal Dead Zone (TDZ) qo‘llaniladi. Ya’ni, o‘zgaruvchiga deklaratsiya qilinmaguncha unga kirishish mumkin emas va ularni aniqlashdan oldin ishlatishga urinishda xato yuzaga keladi.
- Misol:
console.log(a); // ReferenceError: Cannot access 'a' before initialization
let a = 5;
Bu misolda a o‘zgaruvchisi hoisting qilinadi, lekin deklaratsiyaga qadar u TDZda bo‘ladi, shuning uchun unga kirishish mumkin emas.
- Blokda
letvaconst:letvaconstbilan aniqlangan o‘zgaruvchilar blok ko‘lamiga ega. Bu degani, ular faqat o‘sha blok ichida mavjud bo‘ladi.
if (true) {
let b = 20;
const c = 30;
console.log(b); // 20
console.log(c); // 30
}
console.log(b); // ReferenceError: b is not defined
console.log(c); // ReferenceError: c is not defined
Bu yerda b va c faqat if blok ichida mavjud, tashqarida ularga kirishishga urinishda xato bo‘ladi.
2. Temporal Dead Zone (TDZ)
TDZ bu o‘zgaruvchi deklaratsiya qilinmaguncha unga kirishish mumkin bo‘lmagan vaqtinchalik hududdir. Bu holat faqat let va const o‘zgaruvchilariga taalluqli bo‘lib, ular hoisting qilinsa ham, deklaratsiyaga qadar o‘z qiymatlarini olmaguncha ishlatib bo‘lmaydi.
- Misol:
{
console.log(x); // ReferenceError: Cannot access 'x' before initialization
let x = 10;
}
Bu yerda x o‘zgaruvchisi blok ichida aniqlangan, lekin hoisting tufayli deklaratsiyaga qadar TDZ da bo‘ladi, va unga deklaratsiya qilinishidan oldin kirishishga urinishda ReferenceError yuzaga keladi.
TDZ blok ichida bo‘lgan har qanday let yoki const o‘zgaruvchi uchun amal qiladi va u deklaratsiya qilinmaguncha davom etadi.
3. Bloklar va O‘zgaruvchilar
Bloklar JavaScriptda {} figurali qavslar bilan ifodalanadi va o‘zgaruvchilar blok ichida aniqlansa, ularning ko‘lami faqat o‘sha blok bilan cheklangan bo‘lishi mumkin.
Global va lokal o‘zgaruvchilar:
varglobal yoki funksiyaviy ko‘lamda ishlaydi.letvaconstblok ko‘lamiga ega.- Misol:
if (true) {
var globalVar = "I'm global";
let blockLet = "I'm block-scoped";
const blockConst = "I'm also block-scoped";
}
console.log(globalVar); // "I'm global"
console.log(blockLet); // ReferenceError: blockLet is not defined
console.log(blockConst); // ReferenceError: blockConst is not defined
Bu misolda var global bo‘lib qoladi, lekin let va const faqat blok ichida ko‘rinadi.
Xulosa:
-
Hoisting — bu o‘zgaruvchilar va funksiyalarni aniqlashdan oldin ko’tarish jarayoni.
varbilan hoisting qilinadi, lekin dastlab qiymatiundefined.letvaconstham hoisting qilinadi, lekin ular **Temporal Dead Zone (TDZ)**da bo’ladi va deklaratsiyaga qadar ularga kirishib bo‘lmaydi.
-
TDZ (Temporal Dead Zone) — o‘zgaruvchi deklaratsiya qilinmaguncha unga kirishish mumkin bo‘lmagan hudud. Bu faqat
letvaconsto‘zgaruvchilari uchun amal qiladi. -
Blok scoplar —
letvaconstblok ichida aniqlanadi va faqat shu blok ichida ishlaydi,varesa global yoki funksiyaviy ko‘lamda ishlaydi.
Shuning uchun let va const ko’pincha hozirgi zamonaviy JavaScript kod yozishda ishlatiladi, chunki ular kodning xatolikka moyilligini kamaytiradi va blok darajasida ko‘lami cheklaydi.
javascript
Ulashish: