Разбор пытанняў з рэальных сумоўяў - JS Core. Hoisting. Temporal Dead Zone (часовая мертвая зона).
Пытанне:
Ёсць лі hoisting для let, const, classes? Што такое Temporal Dead Zone (часовая мертвая зона)?
Кароткі адказ
let, const, classes таксама ўсплываюць, але, у адрозненне ад var, трапляюць у так званую Temporal Dead Zone, калі яны знаходзяцца ў воласці бачнасці, але не яшчэ не аб'яўленыя.
Падрабязны адказ
JS-двіжок разбірае наш код у 2 этапы:
-счытвае ўсе аб'явы пераменных і function declaration (таму ведае пра іх да іх аб'вы ў кодзе) і пераносіць іх ў верх лексічнай вобласці бачнасці.
-выконвае код
Аб'явы пераменных let і const таксама счытваюцца і пападаюць ці ў пачатак коду (у выпадку глабальнай вобласці бачнасці), ці ў пачатак блоку, але пападаюць у часовую мертвую зону (лічацца мертвымі). Таму інтэрпрэтатар ведае пра іх да пачатку выканання кода, але яны недасяжныя да моманту іх аб'яўлення.
Так у кансолі можам назіраць розныя памылкі, якія з'яўляюцца ў першым радку кода, калі пераменная аб'яўлена ніжэй, і калі наогул не аб'яўлена:
text1console.log(a); 2// Uncaught ReferenceError: a is not defined 3
text1console.log(a); 2const a = 1; 3// ReferenceError: Cannot access 'a' before initialization 4
Каментары
(Каб даслаць каментар залагуйцеся ў свой уліковы запіс)