97 lines
6.1 KiB
Markdown
97 lines
6.1 KiB
Markdown
---
|
||
sidebar_position: 2
|
||
---
|
||
|
||
# Переменные
|
||
|
||
**Переменная** – это «именованное хранилище» для данных.
|
||
|
||
Можно объявить при помощи:
|
||
|
||
- **let**
|
||
- **const** (константа, т.е. изменению не подлежит)
|
||
- **var** (устаревший способ, подробности позже)
|
||
|
||
```js
|
||
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` возвращает тип значения переменной, с двумя исключениями:
|
||
|
||
```js
|
||
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. Так что код выполняется сразу же и у него есть свои локальные переменные.
|
||
```js
|
||
// Способы создания IIFE
|
||
(function() {
|
||
var message = "Привет";
|
||
alert(message); // Привет
|
||
})(); // Круглые скобки вокруг функции
|
||
|
||
(function() {
|
||
alert("Круглые скобки вокруг всего выражения");
|
||
}());
|
||
|
||
!function() {
|
||
alert("Выражение начинается с логического оператора НЕ");
|
||
}();
|
||
|
||
+function() {
|
||
alert("Выражение начинается с унарного плюса");
|
||
}();
|
||
```
|
||
|
||
🚀 **Источник: [https://learn.javascript.ru/variables](https://learn.javascript.ru/variables)** |