Ժամանակավոր մեռած գոտին (TDZ) JavaScript-ի վարքագիծ է, որը տեղի է ունենում, երբ փորձում եք մուտք գործել let կամ const օգտագործմամբ հայտարարված փոփոխականին, նախքան այն սկզբնավորվելը արժեքով: TDZ-ի ընթացքում փոփոխականը գոյություն ունի տիրույթում, սակայն նրան չի կարող մուտք գործել կամ որևէ արժեք վերագրվել, քանի դեռ կոդի կատարման մեջ չի հասել հայտարարագրման կետին:

TDZ-ը ոլորտի մեկնարկի և փոփոխականի փաստացի հայտարարագրման միջև ընկած ժամանակահատվածն է, որը հայտարարվել է let-ի և const-ի միջոցով: TDZ-ի ժամանակ փոփոխականը գոյություն ունի տիրույթում, բայց չի կարող մուտք գործել կամ որևէ արժեք վերագրել, մինչև կոդերի կատարման մեջ չհասնի հայտարարագրման կետին: TDZ-ի ընթացքում փոփոխական մուտք գործելու ցանկացած փորձ հանգեցնում է Հղման սխալ:

TDZհայեցակարգ է, որը վերաբերում է let-ով և const-ով հայտարարված փոփոխականներին, բայց ոչvar-ով հայտարարված փոփոխականներին: Հիմնական տարբերությունը կայանում է նրանում, թե ինչպես են փոփոխականներըբարձրացվումև սկզբնավորվում JavaScript կոդի կատարման փուլում:

Բարձրացում

JavaScript-ում բարձրացնելով, բոլոր փոփոխական հայտարարագրերը (օգտագործելով var let և const) ստեղծման փուլում բարձրացվում են իրենց շրջանակի վերևում: Սա նշանակում է, որ JavaScript-ը սահմանում է հիշողության տարածք փոփոխականների համար նախքան կոդի կատարումը սկսելը:

Նախնականացման կետ

Նախնականացման կետը let-ով և const-ով հայտարարված փոփոխականների համար, արժեքի վերագրումը տեղի չի ունենում այնքան ժամանակ, քանի դեռ գործարկման ժամանակ չի հասել կոդի այն տողը, որտեղ փոփոխականը հայտարարված է:

Ժամանակավոր մեռյալ գոտի

TDZ-ը շրջանակի սկզբի և փոփոխականի փաստացի հայտարարագրման միջև ընկած ժամանակահատվածն է: Այս փուլի ընթացքում փոփոխական մուտք գործելու կամ օգտագործելու ցանկացած փորձ կհանգեցնի Հղման սխալ:

TDZ-ի ընթացքում փոփոխական մուտք գործելու փորձը հանգեցնում է ReferenceError, ինչը ցույց է տալիս, որ փոփոխականը սահմանված չէ կոդի այդ կետում:

var-ով հայտարարված փոփոխականները.

var-ով հայտարարված փոփոխականները նույնպես բարձրացվում են իրենց շրջանակի գագաթին ստեղծման փուլում, ինչպես let և constփոփոխականները:
Այնուամենայնիվ, ի տարբերություն letև const-ի, varփոփոխականները չունեն Ժամանակավոր մահացած գոտի: Դրանք ինքնաբերաբար սկզբնավորվում են չսահմանված արժեքով իրենց շրջանակի սկզբում, նախքան կոդում փաստացի հայտարարությունը:
Սա նշանակում է, որ varփոփոխականներին կարելի է մուտք գործել և ունեն չսահմանված արժեքը նախքան դրանց հայտարարագրումը, առանց Հղման սխալ առաջացնելու:

Օրինակ՝ տարբերությունը ցույց տալու համար

console.log(x); // Output: undefined (No ReferenceError)
var x = 10;
console.log(x); // Output: 10
console.log(x); // Output: ReferenceError: Cannot access 'x' before initialization
let x = 10;

Ամփոփում

Ժամանակավոր մեռյալ գոտին տեղին է միայնlet և const օգտագործմամբ հայտարարագրված փոփոխականների համար: var փոփոխականները նույնպես բարձրացված են, բայց չունեն Ժամանակավոր մեռյալ գոտի և ինքնաբերաբար սկզբնավորվում են undefined արժեքով իրենց շրջանակի սկզբում: Ժամանակավոր մեռյալ գոտին օգնում է բացահայտել փոփոխականների մուտքի հետ կապված պոտենցիալ խնդիրները մինչև դրանց հայտարարումը, և դա պատճառներից մեկն է, թե ինչու են letև constներդրվել const: strong> ES6 ապահովելու ավելի կանխատեսելի վարքագիծ և արգելափակելու շրջանակը: