001 Области видимости
Определяет область действия переменной
То есть, что здесь происходит:
В глобальной области видимости мы создаём две переменные: a и b. Внутри функции мы создаём только переменную b. Присваиваем обоим переменным значения. Внутри функции мы обращаемся к внутренней переменной b, так как мы создали её и она имеется внутри. А уже при обращении к переменной a, мы связываемся с переменной, которая обозначена за функцией, так как внутри функции этой переменной нет. Как итог, мы поменяли значение глобальной переменной a, так как её нет в функции и локальной b (так как мы обозначили её внутри)
002 Цепочка областей видимости
Если описывать кратко, то в данном случае, при выполнении каждой внутренней функции, JS проверял наличие переменной в его области видимости. Сначала поиск переменной шёл внутри innerFn
, потом внутри myFn
и потом уже в глобальной области видимости
Так же если написать innerFn
вне myFn
, то выйдет ошибка, потому что внутренняя функция существует только внутри области видимости нашей внешней функции.
И так же наша внешняя функция вернёт нам undefined
(так как отсутствует инструкция return
)
003 Жизненный цикл переменных
Представление и сравнение жизненного цикла переменных «a» и «b». Тут нужно отметить, что внутри области видимости переменная имеет приоритет над переменной во внешней области видимости. Это так же может приносить проблемы разработчикам и поэтому внутри функций стоит всегда создавать новые переменные, чтобы не менять значения во внешней области видимости
004 Типы областей видимости
Есть три области видимости: глобальная, внутри функции, внутри блока (например, внутри функций, циклов и так далее)
И тут встаёт такая проблема: если мы не объявили переменную до её использования внутри внутренней области видимости, то эта переменная автоматически создастся
Однако нужно соблюдать основные правила работы с переменными
005 Строгий режим
Строгий режим следит более строго за надлежащим написанием кода в JS. Этот режим не позволит создать переменную без её объявления. Такую строку вставляют либо в начало кода, либо непосредственно в функцию, где нужно соблюдать осторожность