Hoisting je mechanismus, který ovlivňuje pozice deklarací proměnných a funkcí v kódu během vykonávání kódu.
Než je kód spuštěn, Javascript ho celý projde a najde všechny deklarace proměnných a funkcí. Tyto deklarace jsou pak automaticky přesunuty na vrchol jejich akutálného rozsahu platnosti (globální nebo platnosti funkce).
To znamená, že můžete používat proměnnou nebo funkci předtím, než je deklarována ve vašem kódu, aniž byste způsobili jakékoliv chyby.
Způsoby deklarací
Přesunuta je pouze deklarace, nikoli přiřazení hodnoty.
Proměnné deklarované pomocí var
jsou automaticky inicializovány na hodnotu undefined
.
Je tak vhodnější deklarovat proměnné na začátku scope a používat klíčová slova let
a const
, která mají blokový scope a omezují hoisting, což vede k čitelnějšímu a předvídatelnějšímu kódu.
Pokud se pokusíte přistoupit k proměnné před její deklarací, dostanete ReferenceError
.
Hoisting funkce
Deklarace funkcí se načtou před spuštěním libovolného kódu, zatímco výrazy funkcí se načtou, až interpreter dojde na příslušný řádek kódu, kde se definuje.