Skip to content

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

Что хранит переменная и почему в новом коде выбирают let или const.

On this page

Программа работает со значениями: именами, числами, ответами пользователя. Переменная связывает понятное имя со значением, чтобы код мог обратиться к нему позже.

main.js
const studentName = "Анна";
let score = 0;
 
score = score + 1;
console.log(studentName, score);

Здесь studentName хранит имя, а score хранит результат, который меняется. const запрещает присвоить переменной новое значение. let разрешает.

Значения бывают разных видов

JavaScript различает типы значений. Число 20 можно умножить, а строку "20" можно соединить с другим текстом. Кавычки меняют смысл записи:

main.js
const age = 20; // number: число
const ageText = "20"; // string: строка
const hasAccess = true; // boolean: да или нет
 
console.log(age + 1); // 21
console.log(ageText + 1); // "201"

Оператор typeof показывает тип значения. Пока используйте его, чтобы проверить, сохранилось ли в переменной число или строка:

main.js
console.log(typeof age); // "number"
console.log(typeof ageText); // "string"

Если значение еще не задано, при чтении переменной можно получить undefined. Значение null разработчик обычно задает сам, когда хочет явно обозначить отсутствие данных. С остальными типами вы встретитесь позже; сейчас важно отличать числа, строки и логические значения и проверять, что именно лежит в переменной.

Давайте переменным говорящие имена: totalPrice помогает понять назначение числа, а x – только если смысл очевиден рядом с кодом. В именах из нескольких слов здесь используем camelCase: первое слово со строчной буквы, следующие начинаются с заглавной.

Чем отличаются var, let и const

Перед таблицей два термина. Область видимости - место в коде, где можно обратиться к переменной. Блок - группа команд внутри фигурных скобок { }.

ОбъявлениеМожно присвоить другое значениеГде доступноПовторное объявление в той же области
varдавнутри функции или всего скрипта; обычный блок { } не ограничиваетразрешено
letдатолько внутри блока { }ошибка
constнеттолько внутри блока { }ошибка

У var много свободы: переменную можно объявить повторно, и фигурные скобки обычного блока ее не ограничивают. Поэтому по расположению строки сложнее понять, где имя доступно, а повторное объявление может скрыть опечатку. Чем больше неявных правил приходится помнить, тем легче пропустить ошибку.

main.js
{
  var message = "Объявление var видно после блока";
  let note = "Объявление let осталось внутри блока";
}
 
console.log(message);
// console.log(note); // Ошибка: note вне блока недоступна.

var объявлена внутри блока, но доступна после него. Точнее, var ограничена телом функции, если объявлена внутри функции. let и const ограничены ближайшим блоком { }. Если повторно объявить let score в той же области, JavaScript сообщит об ошибке; повторное объявление через var разрешено и может скрыть случайную опечатку.

Как выбирать

  • Начинайте с const: имя остается привязанным к одному значению.
  • Берите let, если нужно позже присвоить переменной другое значение, например обновлять счетчик.
  • var оставьте для чтения старого кода. В новых примерах курса его не используем.

const не замораживает объект или массив. Она запрещает заменить значение переменной, но содержимое объекта менять можно:

main.js
const student = { score: 0 };
student.score = 1; // Допустимо: изменили свойство объекта.
 
// student = {}; // Ошибка: пытаемся заменить значение const.

JavaScript узнает тип значения во время выполнения. Позже TypeScript поможет заметить часть несовпадений еще до запуска. Справочник: переменные на MDN.