Эмпирическое правило заключается в том, что все переменные (const, let) должны быть объявлены до того, как их можно будет использовать (var имеет немного другое правило, но мы никогда не должны использовать var в новом javaScript).
Использование необъявленной переменной вызывает «Uncaught ReferenceError: не определено»:
Использование переменной, объявленной позже, приводит к ошибке «Uncaught ReferenceError: «Не удается получить доступ до инициализации»:
Когда обе переменные объявлены перед использованием, код работает так, как ожидалось:
Это же правило применимо и к выражениям функций (объявление функций — одно из исключений, которое будет обсуждаться позже).
Ниже оба выражения функции вызывают «Uncaught ReferenceError: «Не удается получить доступ до инициализации»:
С функцией Стрелка:
Как только функция вызывается после объявления, код работает так, как ожидалось:
Единственным исключением является объявление функции:
В приведенном ниже коде Hoisting позволяет вызывать функцию fullName до ее объявления:
Лучше всего объявлять все переменные (cont, let) и даже объявления функций вверху каждой области. Это сделает всех счастливыми 🤗