$ sudo teach IT
МОДУЛЬ 2 · УРОК 1

Переменные: let, const и var

Переменные — это фундамент любой программы. Без них нельзя ничего запомнить, ничего сохранить и ничем управлять. Разберём, что это такое, зачем нужно и как правильно объявлять переменные в JavaScript.

⏱ ~20 минут 🎓 Для новичков ⚡ JavaScript

📦 Что такое переменная?

Представьте, что вы переезжаете на новую квартиру. У вас куча вещей: книги, одежда, посуда. Чтобы не потерять ничего, вы складываете всё в подписанные коробки: «Книги», «Кухня», «Зима». Когда нужна книга — вы идёте к коробке с надписью «Книги» и достаёте её.

Переменная в программировании — это такая подписанная коробка в памяти компьютера. У каждой коробки есть название (имя переменной) и содержимое (значение). Компьютер умеет найти любую коробку по её имени, достать содержимое или положить туда что-то новое.

💡 Простыми словами: переменная — это именованное место в памяти компьютера, где хранится какое-то значение. Имя придумываете вы сами, значение — то, что вы в неё положили.

Зачем вообще нужны переменные? Посмотрите на реальные ситуации:

  • Вы пишете игру — нужно запомнить счёт игрока, его уровень, оставшиеся жизни
  • Вы делаете интернет-магазин — нужно хранить товары в корзине, итоговую сумму
  • Вы пишете чат — нужно помнить, кто отправил сообщение и что именно
  • Вы создаёте форму — нужно сохранить то, что ввёл пользователь, чтобы потом отправить на сервер

Без переменных программа не могла бы ничего запомнить — каждый раз всё начиналось бы с нуля. Переменные — это память вашей программы.

✏️ Способ первый: let

let — это основной и самый распространённый способ объявить переменную в современном JavaScript. Ключевое слово let говорит JavaScript: «создай мне коробку с таким именем».

let age = 25;           // создали переменную age и положили в неё число 25
let name = "Алиса";    // создали переменную name со строкой "Алиса"
let isLoggedIn = true;  // создали переменную isLoggedIn со значением true

console.log(age);       // выведет: 25
console.log(name);      // выведет: Алиса

Главная особенность let — переменную можно изменить после создания. Это как коробка, которую вы можете открыть и поменять содержимое:

let score = 0;       // начальный счёт
console.log(score);  // 0

score = 10;          // игрок набрал очки — меняем значение
console.log(score);  // 10

score = score + 5;   // добавили ещё 5
console.log(score);  // 15

Обратите внимание: при первом создании мы пишем let score = 0. При изменении — просто score = 10, без ключевого слова let. Слово let нужно только один раз — когда коробка создаётся впервые.

🔑 let — современный стандарт. Если вы не уверены, что использовать — берите let. Он подходит для большинства ситуаций, где значение переменной может меняться.

Также можно объявить переменную без немедленного присваивания значения — тогда она будет содержать специальное значение undefined (означает «пусто», «не задано»):

let userName;              // создали, но не присвоили значение
console.log(userName);     // undefined

userName = "Максим";       // теперь присвоили
console.log(userName);     // Максим

🔒 Способ второй: const

const — от слова constant (константа, постоянная). Это переменная, которую нельзя переприсвоить после создания. Это как коробка, запаянная скотчем: можно посмотреть, что внутри, но нельзя положить туда что-то другое.

const PI = 3.14159;          // математическая константа
const siteUrl = "sudoteach.com";  // адрес сайта
const MAX_USERS = 1000;      // максимальное количество пользователей

console.log(PI);             // 3.14159
console.log(siteUrl);        // sudoteach.com

Если попытаться изменить const — JavaScript выбросит ошибку:

const PI = 3.14159;
PI = 3;  // ❌ TypeError: Assignment to constant variable.
         // Так нельзя! JavaScript не даст это сделать.

⚠️ Важно: const нельзя переприсвоить (нельзя написать myConst = что-то_другое), но если const хранит объект или массив — их содержимое можно менять. Это тонкость, которую мы разберём позже, когда доберёмся до объектов.

Когда использовать const? Везде, где значение не должно меняться: настройки, конфигурации, математические константы, URL-адреса, имена пользователей (в пределах одной функции), результаты вычислений, которые не нужно обновлять.

💡 Совет профи: в современном JavaScript принято использовать const по умолчанию, и переходить на let только тогда, когда точно знаете, что значение будет меняться. Это делает код более предсказуемым и защищает от случайных изменений.

Важно: const требует немедленного присваивания. Нельзя объявить const и потом что-то в неё положить — только сразу:

const greeting;           // ❌ SyntaxError: Missing initializer in const declaration
const greeting = "Привет"; // ✅ Правильно — сразу с значением

🦕 Способ третий: var (устаревший)

var — это самый старый способ объявить переменную, существует с самого начала JavaScript (с 1995 года). Вы будете встречать его в старом коде, поэтому нужно знать, что это такое. Но самому писать var в новом коде — не стоит.

var oldVariable = "я из прошлого";
console.log(oldVariable);  // я из прошлого

Почему var избегают? У него две серьёзные проблемы:

🔓
Проблема 1: нет блочной области видимости

var «вытекает» за пределы блоков кода (фигурных скобок). let и const — нет. Это приводит к неожиданным багам, когда переменная видна там, где не должна.

🚀
Проблема 2: hoisting (всплытие)

JavaScript «поднимает» var-переменные в начало функции. Это значит, что переменную можно использовать до того, как вы её объявили — и это не ошибка, а undefined. Такое поведение очень запутывает.

// Пример hoisting с var (запутанное поведение):
console.log(x);  // undefined — не ошибка! var "всплывает" наверх
var x = 5;
console.log(x);  // 5

// С let — честное поведение:
console.log(y);  // ReferenceError — переменная не существует, всё логично
let y = 5;

Пример с блочной областью видимости:

// var утекает из блока:
if (true) {
  var leaky = "я var";
}
console.log(leaky);  // "я var" — переменная видна снаружи блока! Это опасно.

// let остаётся внутри:
if (true) {
  let safe = "я let";
}
console.log(safe);  // ReferenceError — переменная не видна снаружи. Это правильно!

🚫 Правило: никогда не используйте var в новом коде. Используйте const по умолчанию, let — если значение будет меняться. var изучите только чтобы понимать старый код.

📊 Сравнение: let vs const vs var

Свойство let const var
Можно переприсвоить ✅ Да ❌ Нет ✅ Да
Блочная область видимости ✅ Да ✅ Да ❌ Нет
Hoisting Нет (ошибка) Нет (ошибка) ⚠️ Да (undefined)
Нужно инициализировать сразу ❌ Необязательно ✅ Обязательно ❌ Необязательно
Использовать? ✅ Да ✅ Да (предпочтительно) 🚫 Нет

📝 Правила именования переменных

Имя переменной — это как имя человека: должно быть понятным и однозначным. JavaScript разрешает многое, но есть жёсткие правила и негласные соглашения.

✅ Что можно:
  • Буквы, цифры, знак подчёркивания _ и знак доллара $
  • Имя может начинаться с буквы, _ или $
  • Регистр имеет значение: name и Name — разные переменные
  • Любая длина имени
❌ Что нельзя:
  • Начинать с цифры: 1name — ошибка
  • Использовать пробелы: my name — ошибка
  • Использовать зарезервированные слова: let, const, return, function и другие
  • Использовать спецсимволы: @, #, -, ! и т.д.
// ✅ Правильные имена:
let userName = "Иван";
let totalPrice = 1500;
let isActive = true;
let _privateVar = 42;
let $element = document.getElementById("app");

// ❌ Неправильные имена (вызовут ошибку):
let 1name = "плохо";       // начинается с цифры
let my name = "плохо";    // содержит пробел
let let = "плохо";         // зарезервированное слово

camelCase — стандарт JavaScript:

В JavaScript принято писать имена переменных в стиле camelCase (верблюжий регистр): первое слово с маленькой буквы, каждое следующее слово начинается с заглавной. Например: userName, totalOrderPrice, isUserLoggedIn, maxRetryCount. Имена должны быть говорящими — по имени переменной должно быть понятно, что в ней хранится.

// ❌ Плохо — непонятные имена:
let a = "Иван";
let x = 25;
let f = true;

// ✅ Хорошо — понятные имена:
let userName = "Иван";
let userAge = 25;
let isUserActive = true;

✅ Итоги урока

  • Переменная — это именованное место в памяти компьютера для хранения значения
  • const — константа, нельзя переприсвоить. Использовать по умолчанию
  • let — изменяемая переменная. Использовать когда значение меняется
  • var — устаревший способ, не имеет блочной области видимости, создаёт hoisting. Не использовать в новом коде
  • Имена переменных: camelCase, нельзя начинать с цифры, нельзя использовать пробелы и зарезервированные слова
  • Имя переменной должно чётко описывать, что в ней хранится

В следующем уроке разберём, какие типы данных бывают в JavaScript — числа, строки, булевы значения и другие. 🚀

Тест: Переменные в JavaScript

7 вопросов

Расчёт возраста

Создайте константу birthYear со значением 1995. Создайте переменную currentYear со значением 2026. Создайте переменную age, в которую сохраните разность currentYear и birthYear.

Счётчик

Создайте переменную counter со значением 10. Увеличьте её на 5, затем уменьшите на 3. Используйте сокращённые операторы (+=, -=).

Счётчик

Создайте переменную counter со значением 10. Увеличьте её на 5, затем уменьшите на 3. Используйте сокращённые операторы (+=, -=).