Ժամանակավոր մեռած գոտին (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 ապահովելու ավելի կանխատեսելի վարքագիծ և արգելափակելու շրջանակը: