JavaRush /Курсы /Модуль 1: Web Core /Переменные: var, ...

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

Модуль 1: Web Core
20 уровень , 2 лекция
Открыта

1. Введение

Переменная в JavaScript — это, по сути, “коробка” для хранения данных. Хотите сохранить возраст пользователя? Имя? Результат вычислений? Для всего этого нужны переменные. Представьте себе: у вас есть шкаф с ящиками, и на каждом написано, что внутри. Вот так работает переменная: вы кладёте в неё значение, а потом достаёте по имени.

В JS переменные позволяют:

  • хранить значения (числа, строки, объекты, что угодно!),
  • обращаться к этим значениям по имени,
  • изменять их в процессе работы программы.

Пример самой простой переменной

let name = "Вася";
console.log(name); // Выведет: Вася

2. Способы объявления переменных: var, let, const

В JavaScript есть целых три способа объявить переменную: var, let и const. Звучит как выбор между кофе, чаем и энергетиком — вроде все бодрят, но последствия разные.

var (старичок-дедушка)

var — это самый старый способ объявлять переменные, который появился более 30(!) лет назад. Он до сих пор работает, но у него есть свои “особенности” и баги, о которых мы поговорим чуть позже.

var age = 25;
console.log(age); // 25

let (современный стандарт)

let — появился в стандарте ES6 (2015 год) и стал стандартом для большинства случаев. Он решает многие проблемы var и делает код более предсказуемым.

let city = "Київ";
console.log(city); // Київ

const (константа, не изменяется)

const — тоже появился в ES6. Его используют для переменных, которые не должны изменяться (например, настройки, ключи, магические числа).

const PI = 3.14;
console.log(PI); // 3.14

3. var, let, const — в чем разница?

Давайте разберёмся, чем отличаются эти три способа и почему современные разработчики уже почти не используют var.

var: область видимости — функция

Переменная, объявленная с помощью var, видна во всей функции, в которой она объявлена (или в глобальной области, если не в функции). Это называется функциональная область видимости.

function testVar() {
    if (true) {
        var message = "Привет из if!";
    }
    console.log(message); // Работает! Выведет: Привет из if!
}
testVar();

Здесь переменная message доступна вне блока if, потому что var не “видит” блоки, только функции. Это может привести к неожиданным ошибкам!

Подробнее про if, функции и блоки кода вы узнаете в следующих лекциях. Просто хотелось собрать всю информацию о переменных в одном месте.

let и const: область видимости — блок

Переменные, объявленные с помощью let и const, видны только внутри блока, где они объявлены. Это называется блочная область видимости (block scope).

function testLet() {
    if (true) {
        let message = "Привет из if!";
        console.log(message); // Работает
    }
    console.log(message); // Ошибка! message не видна вне if
}
testLet();

То же самое с const:

if (true) {
    const secret = 42;
    console.log(secret); // 42
}
console.log(secret); // Ошибка! secret не виден вне блока

const: нельзя менять значение

Переменная, объявленная через const, должна быть инициализирована сразу и нельзя изменить её значение (но можно менять содержимое объекта, если это объект — подробнее ниже).

const planet = "Земля";
planet = "Марс"; // Ошибка: Assignment to constant variable

4. Примеры: let vs const vs var

Давайте разберём на простых примерах.

var

var greeting = "Привет";
greeting = "Здравствуйте";
console.log(greeting); // Здравствуйте

let

let count = 10;
count = count + 5;
console.log(count); // 15

const

const year = 2024;
year = 2025; // Ошибка!
console.log(year); // 2024

5. Область видимости (scope): где “живёт” переменная

В программировании очень важно понимать, где именно “видна” переменная. Это называется областью видимости.

Таблица: Сравнение областей видимости

Способ Область видимости Можно переопределить? Можно изменить значение?
var функция да да
let блок нет да
const блок нет нет (но содержимое объекта — да)

Пример с вложенными блоками

if (true) {
    var a = 1;
    let b = 2;
    const c = 3;
}
console.log(a); // 1 — работает, var виден везде
console.log(b); // Ошибка! let не виден вне блока
console.log(c); // Ошибка! const не виден вне блока

Пример с функцией

function foo() {
    var x = 10;
    let y = 20;
    const z = 30;
    console.log(x, y, z); // 10 20 30
}
foo();
console.log(x, y, z); // Ошибка! Всё объявлено внутри функции

6. Hoisting — “всплытие” переменных

В JS есть забавная штука — hoisting (всплытие). Это когда объявления переменных “поднимаются” в начало области видимости, но инициализация — нет.

var: всплывает полностью

console.log(msg); // undefined, а не ошибка!
var msg = "Hello";

В этом примере переменная msg как бы объявляется в начале функции, но значение присваивается только на строке с =.

let и const: всплывают, но не инициализируются

console.log(name); // ReferenceError!
let name = "Вася";

С let и const переменная существует в так называемой “временной мёртвой зоне” (TDZ) — до строки объявления к ней нельзя обратиться.

7. Best practices: как правильно объявлять переменные

  • Используйте const по умолчанию.
    Если переменная не должна меняться — объявляйте её через const. Это защищает от случайных изменений и делает код понятнее.
  • Используйте let, если переменная будет меняться.
    Например, счётчик в цикле, временные значения и т.п.
  • Не используйте var.
    Почти никогда. Только если вы пишете код для очень старых браузеров или хотите удивить коллег.
  • Давайте переменным осмысленные имена.
    Не пишите a, b, c, если только это не математика. Лучше userName, totalPrice, isLoggedIn.
  • Область видимости — ваш друг.
    Объявляйте переменные как можно ближе к месту использования, чтобы не было “загрязнения” глобального пространства.

8. Практика: объявляем переменные в вашем приложении

Давайте добавим переменные в ваше учебное приложение. Пусть у нас есть файл script.js, который подключён к HTML через <script src="script.js"></script>.

Пример 1: let

let userName = "Алиса";
console.log("Имя пользователя:", userName);

userName = "Боб";
console.log("Новое имя пользователя:", userName);

Пример 2: const

const appName = "Моё первое приложение";
console.log("Название приложения:", appName);
appName = "Новое имя"; // Ошибка!

Пример 3: var (только для истории)

var oldSchool = "Старый способ";
console.log(oldSchool);

Пример 4: область видимости

let score = 0;

function addPoints(points) {
    let message = "Добавляем очки!";
    score += points;
    console.log(message, "Текущий счёт:", score);
}

addPoints(5);
console.log(message); // Ошибка! message видна только внутри функции

9. Типичные ошибки при работе с переменными

Ошибка №1: Использование var вместо let/const.
var может привести к путанице с областями видимости, особенно в больших программах. Например, если вы объявили переменную внутри блока с помощью var, она “просочится” наружу, что часто вызывает баги.

Ошибка №2: Забыл объявить переменную.
Если вы просто пишете x = 5; без let, const или var, переменная становится глобальной (в браузере — свойством window). Это очень плохая практика и может привести к конфликтам и труднопоисковым ошибкам.

Ошибка №3: Переопределение const.
Попытка присвоить новое значение переменной, объявленной через const, вызовет ошибку. Если переменная должна меняться — используйте let.

Ошибка №4: Использование переменной до объявления.
С let и const это вызовет ошибку ReferenceError. С var — получите undefined, что может привести к трудноуловимым багам.

Ошибка №5: Дублирование имён переменных.
В одной области видимости нельзя объявлять две переменные с одним именем через let или const. С var это возможно, но не рекомендуется.

1
Задача
Модуль 1: Web Core, 20 уровень, 2 лекция
Недоступна
Методы в прототипе
Методы в прототипе
1
Задача
Модуль 1: Web Core, 20 уровень, 2 лекция
Недоступна
Цепочка прототипов
Цепочка прототипов
Комментарии
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ