Разбор пытанняў з рэальных сумоўяў - 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 таксама счытваюцца і пападаюць ці ў пачатак коду (у выпадку глабальнай вобласці бачнасці), ці ў пачатак блоку, але пападаюць у часовую мертвую зону (лічацца мертвымі). Таму інтэрпрэтатар ведае пра іх да пачатку выканання кода, але яны недасяжныя да моманту іх аб'яўлення.
Так у кансолі можам назіраць розныя памылкі, якія з'яўляюцца ў першым радку кода, калі пераменная аб'яўлена ніжэй, і калі наогул не аб'яўлена:
console.log(a); // Uncaught ReferenceError: a is not defined
console.log(a); const a = 1; // ReferenceError: Cannot access 'a' before initialization
Каментары
(Каб даслаць каментар залагуйцеся ў свой уліковы запіс)