July 21, 2023

JavaScript-da Temporal Dead Zone (TDZ) nima? | JavaScript doiralari

JavaScript-da vaqtinchalik o'lik zona (TDZ) nima? JavaScript o'zgaruvchan doiralari.

ES6 dan oldin, var dan boshqa o'zgaruvchilarni e'lon qilishning boshqa usuli yo'q edi. Lekin ES6 bizga let va const olib keldi.

Let va const deklaratsiyasi blokdan nusxa ko'chiriladi, ya'ni ularga faqat ularni o'rab turgan { } ichida kirish mumkin. var, aksincha, bunday cheklov yo'q.

Mana bir misol:

let babyAge = 1;
let isBirthday = true;

if (isBirthday) {
	let babyAge = 2; 
}

console.log(babyAge); // Hmmmm. This prints 1

Buning sababi, babyAge ni 2 ga qayta e'lon qilish faqat if blokida mavjud. Shundan so'ng, birinchi babyAge ishlatiladi. Bu ikki xil o'zgaruvchi ekanligini ko'ryapsizmi?

Aksincha, var deklaratsiyasi blok doirasiga ega emas:

var babyAge = 1;
var isBirthday = true;

if (isBirthday) {
	var babyAge = 2; 
}

console.log(babyAge); // Ah! This prints 2

Let / const va var o'rtasidagi oxirgi muhim farq shundaki, agar siz var ga e'lon qilinmasdan oldin kirsangiz, u undefined bo'ladi. Ammo let va const uchun ham xuddi shunday qilsangiz, ular ReferenceError ni chiqaradilar.

console.log(varNumber); // undefined
console.log(letNumber); // Doesn't log, as it throws a ReferenceError letNumber is not defined

var varNumber = 1;
let letNumber = 1;
Xato Temporal Dead Zone tufayli yuzaga keladi.

TDZ bu: o'zgaruvchilar mavjud bo'lmagan holatni tavsiflovchi atama. Ular doirada, lekin e'lon qilinmagan.

Let va const o'zgaruvchilari TDZda o'z qo'shilish doirasi boshidan e'lon qilinguncha mavjud bo'ladi.

Shuningdek, siz o'zgaruvchilar TDZda ular bog'langan paytdan (o'zgaruvchi u joylashgan doiraga bog'langanda) u e'lon qilingan paytgacha (xotirada ushbu o'zgaruvchi uchun nom saqlanganida) mavjud deb aytishingiz mumkin.

Deklaratsiya va ishga tushirish o'rtasidagi farq nima?

Bu erda o'zgaruvchilarni e'lon qilish va o'zgaruvchilarni ishga tushirish misoli keltirilgan.

function scopeExample() {

    let age; // 1
    age = 20; // 2
    let hands = 2; // 3
}

O'zgaruvchini e'lon qilish uning nomini joriy hajmda xotirada saqlashimizni anglatadi. Izohlarda 1 ball bilan belgilangan.

O'zgaruvchilarni ishga tushirish - bu o'zgaruvchining qiymatini o'rnatish. Bu sharhlarda 2 bilan ko'rsatilgan.

Yoki siz har doim ikkalasini bir qatorda qilishingiz mumkin. Bu sharhlarda 3 bilan ko'rsatilgan.

Shunga qaramay, let va const o'zgaruvchilari TDZda o'zlarining qamrab olish doirasi boshidan e'lon qilinguncha mavjud bo'ladi.

Shunday qilib, yuqoridagi kod parchasidan yosh uchun TDZ qayerda? Bundan tashqari, qo'llarda TDZ bormi? Agar shunday bo'lsa, qo'llar uchun TDZning boshlanishi va oxiri qaerda?

Agar TDZ ichiga console.log yozsak, siz ushbu xatoni ko'rasiz:

Nima uchun TDZ doiraning yuqori qismi va o'zgaruvchan deklaratsiya o'rtasida mavjud? Buning o'ziga xos sababi nimada?

bu HOISTING bilan bogliq

DAVOMI KELGUSI SERIALARDA.......