Эмпирическое правило заключается в том, что все переменные (const, let) должны быть объявлены до того, как их можно будет использовать (var имеет немного другое правило, но мы никогда не должны использовать var в новом javaScript).

Использование необъявленной переменной вызывает «Uncaught ReferenceError: не определено»:

Использование переменной, объявленной позже, приводит к ошибке «Uncaught ReferenceError: «Не удается получить доступ до инициализации»:

Когда обе переменные объявлены перед использованием, код работает так, как ожидалось:

Это же правило применимо и к выражениям функций (объявление функций — одно из исключений, которое будет обсуждаться позже).

Ниже оба выражения функции вызывают «Uncaught ReferenceError: «Не удается получить доступ до инициализации»:

С функцией Стрелка:

Как только функция вызывается после объявления, код работает так, как ожидалось:

Единственным исключением является объявление функции:

В приведенном ниже коде Hoisting позволяет вызывать функцию fullName до ее объявления:

Лучше всего объявлять все переменные (cont, let) и даже объявления функций вверху каждой области. Это сделает всех счастливыми 🤗