
Прежде чем начать, давайте сначала посмотрим на область действия функции.
В JavaScript область действия функции означает, что все переменные, объявленные в функции, видны во всем теле функции.

Приведенный выше код означает, что переменные видны еще до их объявления. Эта функция JavaScript неофициально известна как подъем.
Подъем — это тип поведения по умолчанию, при котором все объявления, будь то объявление переменной или объявление функции, перемещаются в верхнюю часть области непосредственно перед выполнением кода программы.
Вы можете подумать, что первая строка фрагмента кода напечатает значение «глобальная область». Потому что оператор var, объявляющий локальную переменную, еще не был выполнен. Из-за рекомендаций по объему функций этого не произойдет. Глобальная переменная с тем же именем остается скрытой во всей функции, поскольку локальная переменная определена во всем теле функции.
Приведенный выше код эквивалентен следующему, где инициализация переменных оставлена в покое, а объявление переменной «поднято» наверх:

Тем не менее, это можно считать преимуществом для объявления функций и переменных, рекомендуется всегда объявлять переменные, независимо от того, находятся ли они в функции или глобальной области видимости. Это точно определяет, как интерпретатор должен управлять ими во время выполнения.
ES6
С ES6, широко известным как ECMAScript 2015, в Javascript был включен ряд новых функций:
- пусть и const
- Литералы шаблонов (строки шаблонов)
- Выражения стрелочных функций и т. д.
Другой способ объявить такие переменные, как var, — это использовать let и cost, но есть ключевое различие. Как и раньше, мы ожидаем, что вывод журнала для ключевого слова var будет неопределенным. Но es6 let не любит нас, использующих необъявленные переменные, интерпретатор выдает Reference ошибка:

Мы всегда сначала объявляем наши переменные, потому что для этого.
Подъемные функции
Как уже отмечалось, при подъеме функции это позволяет нам вызвать функцию еще до того, как она будет записана в нашем коде.

Теперь мы понимаем, почему JavaScript позволяет нам вызывать функцию еще до того, как мы ее объявим. Но когда мы говорим о функциональных выражениях, они не поднимаются. Давайте посмотрим на следующий код:

Подводя итог , мы можем сказать, что объявление и инициализация переменных JavaScript перед использованием рассматривается как хорошее решение. Кроме того, строгий режим JavaScript es5 может помочь в раскрытии необъявленных переменных.