Какие способы объявления переменных знаешь в JavaScript?

Ответ

В современном JavaScript (ES6+) используются три основных ключевых слова:

  1. const: Объявляет константную ссылку на значение. Сама ссылка не может быть переназначена, но если значение — объект или массив, его внутреннее состояние можно изменять.

    const PORT = 3000;
    const config = { env: 'production' };
    config.env = 'development'; // Допустимо
    // config = {}; // Ошибка: Assignment to constant variable.
  2. let: Объявляет переменную с блочной областью видимости, значение которой можно изменять.

    let counter = 0;
    if (true) {
      let counter = 10; // Это отдельная переменная в этом блоке
      console.log(counter); // 10
    }
    console.log(counter); // 0
  3. var: Устаревший способ с функциональной областью видимости и поднятием (hoisting). Может приводить к неочевидным ошибкам.

    function example() {
      console.log(x); // undefined (поднята, но не инициализирована)
      var x = 5;
    }

Мой подход в Node.js-проектах:

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

Ответ 18+ 🔞

Давай разберем эту тему, а то тут у некоторых в головах каша, как будто они var из 2010 года нашли и не знают, куда его приткнуть.

Смотри, в современном JS есть три главных слова, и они не просто так появились. Это не для красоты, а чтобы мозги не выносить.

const — это типа железобетонная привязка. Объявил — и всё, ссылку на значение менять нельзя. Но тут есть подвох, который всех новичков наёбывает. Если значением оказался объект или массив, то саму переменную ты не переприсвоишь, а вот внутрь этого объекта лезть и менять всё что угодно — пожалуйста. Это как дверь в квартиру заварили, но внутри ремонт делать не запретили.

const PORT = 3000; // Всё, приехали. 3000 и точка.
const app = { name: 'MyApp' };
app.name = 'ShitApp'; // А вот это можно! Меняем внутренности.
// app = {}; // А это уже нет. Будет тебе ошибка — иди нахуй.

let — это уже более гибкая штука. Переменная с блочной видимостью, её можно менять. Главная фишка — она живёт только в своих фигурных скобках {}. Это чтобы не было этих ебушки-воробушки, когда переменная из цикла или ifа вылезала наружу и всё ломала.

let score = 0;
if (true) {
  let score = 999; // Это своя, локальная score, отдельная.
  console.log(score); // 999
}
console.log(score); // 0 — оригинальная на месте.

А теперь про старого пердуна var. Ёпта, это просто пиздец, а не ключевое слово. У него функциональная область видимости и поднятие (hoisting). Это значит, что он всплывает, как говно в унитазе, в самое начало функции. Смотри, какой трэш:

function someFunc() {
  console.log(x); // undefined — он уже есть, но значения ещё нет! Удивление пиздец.
  var x = 5;
}

Представляешь? Ты обращаешься к переменной ДО того, как её объявил, и тебе не ошибка, а undefined. Это ж какого хуя? На таких вещах половина багов в старом коде и сидит.

Так как же жить-то? Мой подход в Node.js простой, как три копейки:

  1. Всё, что можно, объявляю через const. По умолчанию. Серверный порт, конфиг, импорты — всё на const. Это дисциплинирует.
  2. let — только когда реально надо менять значение. Счётчик в цикле for, какая-нибудь флаг-переменная, которая меняет состояние. Во всех остальных случаях — const.
  3. Про var забываю, как про страшный сон. Серьёзно. Его поведение — это манда с ушами. Он делает код непредсказуемым. В новом проекте его место — только в учебниках по истории JS, рядом с динозаврами. Доверия к нему — ноль ебать.

Вот и вся философия. Const везде, где можешь, let — вынужденно, var — в пизду. И код станет чище, а жизнь — спокойнее.