Переменные в JavaScript
Переменная в JavaScript — это именованный контейнер для хранения данных, который позволяет обращаться к значению по его имени в процессе выполнения программы.
Каждая переменная ассоциирована с определённым значением (число, строка, объект, функция и т.д.), которое может меняться во время работы приложения. Переменные позволяют сохранять промежуточные результаты, пользовательские данные, состояния интерфейса — всё, что требуется для динамического поведения приложения.
Пример:
let age = 25;
let userName = "Алексей";
let isActive = true;
Здесь:
age,userName,isActive— имена переменных.25,"Алексей",true— значения, которые они хранят.
Ключевые особенности:
- Динамическая типизация — тип значения определяется автоматически при присваивании, и переменная может хранить значения разных типов в разное время.
let x = 10; // число x = "привет"; // теперь строка — допустимо x = [1, 2, 3]; // теперь массив — тоже допустимо - Объявление и использование — переменную нужно объявить перед использованием (кроме случаев с
varв нестрогом режиме, но это устаревшая практика). - Область видимости — определяет, где переменная доступна (блок, функция, глобально), зависит от ключевого слова (
let,const,var).
Подробнее про эти особенности мы прочтём в следующих лекциях.
Названия переменных
При создании и использовании переменных необходимо следовать правилам наименования переменных.
Работа с переменными: объявление, инициализация и присваивание
Работа с переменными включает три ключевых действия: объявление, инициализация и присваивание. Эти понятия тесно связаны, но не тождественны — их различие критически важно для понимания поведения кода.
Объявление
Объявление переменной — это создание её имени в области видимости. Оно сообщает интерпретатору: «Я хочу использовать эту метку для хранения значения».
В JavaScript есть три ключевых слова для объявления:
| Ключевое слово | Особенности |
|---|---|
| var | Функциональная область видимости, поднимается (hoisting), может быть переобъявлена. Устарел, не рекомендуется. |
| let | Блочная область видимости, поднимается, но не инициализируется до строки объявления («временная мёртвая зона»). Можно переassign, но нельзя переобъявить в одной области. |
| const | Блочная область видимости, поднимается, но не инициализируется до строки объявления. После инициализации нельзя изменить ссылку на значение. |
Примеры:
var x; // объявление через var
let y; // объявление через let
const z; // Ошибка: const требует инициализации при объявлении
Ключевое отличие: const обязывает сразу присвоить значение — без этого возникает синтаксическая ошибка.
💡 Рекомендация: Всегда используйте const по умолчанию. Если знаете, что значение будет меняться — замените на let. Никогда не используйте var в современных проектах — он вносит путаницу из-за hoisting и функциональной области видимости.
Инициализация
Инициализация — это первое присваивание значения переменной в момент её создания. Это когда переменная получает своё начальное значение и становится доступной для использования.
- Инициализация может совпадать с объявлением.
- Она обязательна для const, опциональна для let и var.
Примеры:
let age; // объявление — без инициализации (значение undefined)
age = 25; // присваивание — теперь переменная проинициализирована
let score = 100; // объявление + инициализация в одной строке
const name = "Алекс"; // объявление + инициализация (обязательно!)
Инициализация = объявление + первое присваивание в одном действии.
Присваивание
Присваивание — это операция изменения значения уже существующей переменной. Оно происходит после объявления (и, если нужно, после инициализации).
- Для let — можно присваивать сколько угодно раз.
- Для const — присваивание разрешено только один раз (при инициализации); любое последующее присваивание вызовет ошибку.
- Присваивание не обязательно должно происходить сразу после объявления.
Примеры:
let count;
count = 0; // первое присваивание (и одновременно инициализация)
count = count + 1; // второе присваивание — изменение значения
count = null; // присваивание — можно менять
const PI = 3.14;
PI = 3.14159; // Ошибка: присваивание const после инициализации запрещено
// Но! Если значение — объект или массив:
const user = { name: "Иван" };
user.name = "Петр"; // Разрешено — меняется содержимое объекта, а не ссылка
user = {}; // Ошибка — попытка изменить ссылку
Важно: const защищает ссылку, а не содержимое. Для объектов и массивов можно менять свойства — это не нарушает константность.
Рекомендация: не жалеть создавать лишнюю переменную
В JavaScript, как и в любом языке программирования, читаемость и поддерживаемость кода важнее минимального количества строк. Создание дополнительной переменной для хранения промежуточного результата — это не расточительство, а практика, повышающая ясность кода.
Почему это полезно:
- Упрощает чтение: имя переменной может объяснять смысл действия, вместо того чтобы оставлять сложное выражение без контекста.
- Облегчает отладку: можно легко поставить точку останова на конкретной переменной и увидеть её значение.
- Снижает когнитивную нагрузку: другие разработчики (и вы сами через неделю) быстрее поймут логику.
- Повышает переиспользуемость: если значение используется несколько раз — нет нужды повторять вычисление.
Пример до и после:
Без лишней переменной (менее читаемо):
if (user.age >= 18 && user.status === 'active' && user.country !== 'restricted') {
enableAccess();
}
С лишней переменной (более понятно):
const isAdult = user.age >= 18;
const isActive = user.status === 'active';
const isAllowedCountry = user.country !== 'restricted';
if (isAdult && isActive && isAllowedCountry) {
enableAccess();
}
Здесь имена переменных выполняют роль документации — они сразу говорят, что проверяется, а не как.
Важно:
Не стоит создавать переменные ради создания — только если они действительно улучшают понимание. Не нужно оборачивать простые литералы или очевидные значения, например:
const five = 5; // Избыточно
return x + five;
// Лучше:
return x + 5;
Но если значение получено в результате вычисления, преобразования или запроса — лучше сохранить его с осмысленным именем.
Использование переменных в коде
Переменные используются для хранения данных, которые могут изменяться во время выполнения программы. Они позволяют:
- Сохранять результаты вычислений;
- Передавать данные между частями кода;
- Управлять состоянием приложения (например, флаги, счётчики, пользовательские данные).
Правила использования:
- Обращайтесь к переменной только после её объявления и инициализации. Попытка использовать
letилиconstдо объявления вызовет ошибку ReferenceError. - Не используйте переменные с неопределённым значением (
undefined) без проверки — это источник багов. - Избегайте глобальных переменных. Всегда ограничивайте область видимости блоками (
{}), функциями или модулями. - Используйте переменные для повторяющихся значений — это упрощает изменение параметров в будущем (например, таймауты, цвета, константы конфигурации).
Пример правильного использования:
const apiUrl = 'https://api.example.com/data';
const timeoutMs = 5000;
fetch(apiUrl, { timeout: timeoutMs })
.then(response => response.json())
.then(data => {
const processedData = data.map(item => item.toUpperCase());
displayResults(processedData);
});
Здесь каждая переменная имеет чёткую роль:
apiUrl— централизованное управление адресом API;timeoutMs— легко изменяемый параметр;processedData— промежуточный результат, понятный по имени.
Ошибки, которых следует избегать:
- Переиспользование одной переменной для разных целей:
let user = getUserById(123); user = calculateDiscount(user); // Теперь user — не объект пользователя, а число. Путаница! - Использование переменных без инициализации:
let result; console.log(result + 10); // NaN — непредсказуемое поведение