Ответ
В современном JavaScript (ES6+) используются три основных ключевых слова:
-
const: Объявляет константную ссылку на значение. Сама ссылка не может быть переназначена, но если значение — объект или массив, его внутреннее состояние можно изменять.const PORT = 3000; const config = { env: 'production' }; config.env = 'development'; // Допустимо // config = {}; // Ошибка: Assignment to constant variable. -
let: Объявляет переменную с блочной областью видимости, значение которой можно изменять.let counter = 0; if (true) { let counter = 10; // Это отдельная переменная в этом блоке console.log(counter); // 10 } console.log(counter); // 0 -
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 простой, как три копейки:
- Всё, что можно, объявляю через
const. По умолчанию. Серверный порт, конфиг, импорты — всё наconst. Это дисциплинирует. let— только когда реально надо менять значение. Счётчик в циклеfor, какая-нибудь флаг-переменная, которая меняет состояние. Во всех остальных случаях —const.- Про
varзабываю, как про страшный сон. Серьёзно. Его поведение — это манда с ушами. Он делает код непредсказуемым. В новом проекте его место — только в учебниках по истории JS, рядом с динозаврами. Доверия к нему — ноль ебать.
Вот и вся философия. Const везде, где можешь, let — вынужденно, var — в пизду. И код станет чище, а жизнь — спокойнее.