Переменные
Переменная – это «именованное хранилище» для данных.
Можно объявить при помощи:
- let
- const (константа, т.е. изменению не подлежит)
- var (устаревший способ, подробности позже)
let message;
message = 'Hello'; // сохранить строку 'Hello' в переменной с именем message
let user = 'John', age = 25, message = 'Hello';
let user = 'John',
age = 25,
message = 'Hello';
Имя переменной может включать:
- Буквы и цифры, однако цифра не может быть первым символом.
- Символы $ и _ используются наряду с буквами.
- Иероглифы и символы нелатинского алфавита также допустимы, но обычно не используются.
Переменные типизируются динамически. В них могут храниться любые значения.
Всего существует 8 типов данных:
- number для целых и вещественных чисел,
- bigint для работы с целыми числами произвольной длины,
- string для строк,
- boolean для логических значений истинности или ложности: true/false,
- null – тип с единственным значением null, т.е. «пустое значение» или «значение не существует»,
- undefined – тип с единственным значением undefined, т.е. «значение не задано»,
- object и symbol – сложные структуры данных и уникальные идентификаторы; их мы ещё не изучили.
Оператор typeof возвращает тип значения переменной, с двумя исключениями:
typeof null == "object" // ошибка в языке
typeof function(){} == "function" // именно для функций
Устаревшее ключевое слово "var"
Обычно var не используется в современных скриптах, но всё ещё может скрываться в старых.\
Существует 2 основных отличия var от let/const:
- Переменные var не имеют блочной области видимости, они ограничены, как минимум, телом функции.
- Объявления (инициализация) переменных var производится в начале исполнения функции (или скрипта для глобальных переменных).
Для «var» не существует блочной области видимости
Область видимости переменных var ограничивается либо функцией, либо, если переменная глобальная, то скриптом. Такие переменные доступны за пределами блока.
var выходит за пределы блоков if, for и подобных. Это происходит потому, что на заре развития JavaScript блоки кода не имели лексического окружения.
«var» допускает повторное объявление
Используя var, можно переобъявлять переменную сколько угодно раз. Повторные var игнорируются.
«var» обрабатываются в начале запуска функции
Это поведение называется «hoisting» (всплытие, поднятие), потому что все объявления переменных var «всплывают» в самый верх функции. Объявления переменных var обрабатываются в начале выполнения функции (или запуска скрипта, если переменная является глобальной).
Другими словами, переменные var считаются объявленными с самого начала исполнения функции вне зависимости от того, в каком месте функции реально находятся их объявления (при условии, что они не находятся во вложенной функции).
Объявления переменных «всплывают», но присваивания значений – нет.
IIFE
В прошлом, поскольку существовал только var, а он не имел блочной области видимости, программисты придумали способ её эмулировать. Этот способ получил название «Immediately-invoked function expressions» (сокращенно IIFE).
Здесь создаётся и немедленно вызывается Function Expression. Так что код выполняется сразу же и у него есть свои локальные переменные.
// Способы создания IIFE
(function() {
var message = "Привет";
alert(message); // Привет
})(); // Круглые скобки вокруг функции
(function() {
alert("Круглые скобки вокруг всего выражения");
}());
!function() {
alert("Выражение начинается с логического оператора НЕ");
}();
+function() {
alert("Выражение начинается с унарного плюса");
}();
🚀 Источник: https://learn.javascript.ru/variables