← Назад к вопросам

Как определяешь переменные?

1.8 Middle🔥 111 комментариев
#JavaScript Core

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI3 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Определение переменных в JavaScript

В JavaScript существует несколько способов определения переменных, каждый с собственными характеристиками и правилами использования. Выбор между ними критически влияет на качество, безопасность и поддерживаемость кода.

var — Старый подход (не рекомендуется)

var — это исторически первый способ определения переменных в JavaScript. Однако он имеет множество опасных особенностей:

var name = "John";
var age = 30;

// Проблема 1: Function scope
function test() {
  var x = 10;
  if (true) {
    var x = 20; // Переопределяет внешнюю x
  }
  console.log(x); // 20, а не 10
}

// Проблема 2: Hoisting
console.log(y); // undefined, а не ошибка
var y = 5;

// Проблема 3: Глобальная область
var globalVar = "danger";
console.log(window.globalVar); // "danger" (в браузере)

let — Современный стандарт (рекомендуется)

let появилась в ES6 и решает большинство проблем var:

let name = "John";
let age = 30;

// Правило 1: Block scope
function test() {
  let x = 10;
  if (true) {
    let x = 20; // Локальная переменная для этого блока
  }
  console.log(x); // 10, корректно
}

// Правило 2: Temporal Dead Zone
// console.log(z); // ReferenceError: Cannot access z before initialization
let z = 5;

// Правило 3: Re-declaration запрещена
// let name = "Jane"; // SyntaxError

const — Когда нужна неизменяемость

const используется для переменных, которые не будут переприсваиваться. Это лучший выбор по умолчанию:

const PI = 3.14159;
const user = { name: "John", age: 30 };
const numbers = [1, 2, 3];

// ВАЖНО: const блокирует переприсваивание, но не мутацию
// const user = {}; // Error: Assignment to constant variable
user.age = 31; // OK! Мутация объекта разрешена
user.name = "Jane"; // OK!

// Для массивов то же самое
numbers[0] = 10; // OK
numbers.push(4); // OK
// numbers = []; // Error

Лучшие практики

1. Приоритет использования

// ✅ ИДЕАЛЬНО: const по умолчанию
const MAX_RETRIES = 3;
const user = { name: "John" };

// ✅ ХОРОШО: let когда нужна переприсваивание
let counter = 0;
let attempt = 0;

// ❌ ИЗБЕГАТЬ: var
var oldStyle = "не используй"; // Забудь что это существует

2. Типизация (TypeScript)

// Явная типизация делает код понятнее
const users: User[] = [];
let isLoading: boolean = false;
const config: Config = { timeout: 5000 };

3. Именование

// Используй camelCase для переменных
const userEmail = "user@example.com";
let isAuthenticated = false;

// UPPERCASE для констант
const API_URL = "https://api.example.com";
const MAX_RETRIES = 3;

Правило 80/20

В профессиональном коде распределение должно быть примерно такое:

  • 80% const — значения не меняются
  • 19% let — переменные в циклах, счётчики
  • 1% var — только в легаси коде

Это указывает на хороший дизайн: предсказуемый код с минимумом мутаций. Если у тебя много let и var, переосмотри архитектуру.

Выбор между const/let/var — это не просто синтаксис, это философия написания безопасного, понятного и поддерживаемого кода.

Как определяешь переменные? | PrepBro