Итак, на этот процесс можно взглянуть так (в метафорическом
смысле): объявления переменных и функций «перемещаются» из
их текущей позиции в начало кода. При этом происходит поднятие
(hoisting).
Другими словами, «яйцо» (объявление) следует перед «курицей»
(присваивание).
Поднимаются только сами объявления, а все присваивания
и другая исполняемая логика остаются на своих местах. Если
бы поднятие могло изменять исполняемую логику кода, это
породило бы сущий хаос в программе.