Nel mondo dello sviluppo frontend, conoscere var let const JavaScript è fondamentale per scrivere codice sicuro, chiaro e conforme agli standard del 2025. Fino a qualche anno fa, var era la dichiarazione più utilizzata, ma oggi let e const ne hanno rivoluzionato l’uso. In questa guida approfondiremo le differenze tra le tre parole chiave, con consigli pratici, best practice ed esempi di codice.
Var Let Const JavaScript: perché è importante nel 2025
Nel 2025, lo sviluppo JavaScript è segnato da continui aggiornamenti (basti pensare a ES2025) e da un crescente numero di librerie e framework. La corretta gestione delle variabili con var let const JavaScript è cruciale per:
- Evitare bug dovuti a scope e shadowing.
- Rendere il codice più leggibile e manutenibile.
- Prevenire conflitti di nome e problemi di hoisting.
- Avere un approccio più sicuro e coerente con le best practice moderne.
Scegliere la dichiarazione giusta tra var, let e const può sembrare un dettaglio, ma è uno dei pilastri fondamentali per garantire qualità al progetto.
Storia di var: scope function, hoisting, problemi principali
Prima di ES6, la maggior parte del codice JavaScript usava var. Le sue caratteristiche:
- Function Scope
Una variabile dichiarata convarè visibile all’interno della funzione in cui è stata definita. In blocchi comeifofor, la variabile rimane accessibile anche all’esterno di quei blocchi. - Hoisting
Convar, la dichiarazione viene “spostata” in cima allo scope (function o globale). Questo può portare a confusioni: puoi usare la variabile prima che sia stata effettivamente dichiarata, ottenendoundefinedsenza errori. - Collisioni e shadowing
Lo scope a livello di funzione (e non di blocco) rende possibile sovrascrivere la stessa variabile accidentalmente.
Problemi principali di var:
- Manutenibilità ridotta: in file lunghi diventa complicato rintracciare dove sia stata modificata la variabile.
- Shadowing involontario: esistono maggiori possibilità di dichiarare una variabile con lo stesso nome causando sovrapposizioni.
- Hoisting confuso: il codice risulta meno esplicito e più difficile da leggere.
Introduzione a let e const: scope block, mutabilità e sicurezza
Con l’avvento di ES6, let e const hanno risolto molti dei problemi legati a var.
- Block Scope
Sialetcheconstrispettano lo scope di blocco. Se dichiari una variabile in unifo in unfor, rimane disponibile solo all’interno di quelle parentesi graffe. - Temporal Dead Zone
Sebbene ancheleteconstsiano soggetti a hoisting, se provi a usarli prima della loro dichiarazione ottieni un ReferenceError. Questa finestra si chiama Temporal Dead Zone. - Mutabilità
letconsente la riassegnazione.constimpedisce la riassegnazione, proteggendo il riferimento.
- Sicurezza
- Meno probabilità di bug grazie al block scope.
constrende immediatamente chiara l’intenzione di non cambiare un valore.
Tabella comparativa
| Caratteristica | var | let | const |
|---|---|---|---|
| Scope | Function scope | Block scope | Block scope |
| Riassegnazione | Consentita | Consentita | Non consentita |
| Riderichiarazione | Consentita nello stesso scope | Non consentita nello stesso scope | Non consentita nello stesso scope |
| Hoisting | Sì (accessibile come undefined) | Sì (ma con ReferenceError prima della dichiarazione) | Sì (ma con ReferenceError prima della dichiarazione) |
| Uso principale | Compatibilità con vecchio codice | Variabili riassegnabili (cicli, contatori) | Variabili costanti di riferimento |
Quando usare const, quando preferire let e quando evitare var
const- Usalo di default se la variabile non cambia.
- Ottimo per riferimenti a oggetti e array che non vuoi riassegnare.
let- Usalo se sai che il valore cambierà nel corso del blocco (es. contatori nei
for, flag booleani, ecc.).
- Usalo se sai che il valore cambierà nel corso del blocco (es. contatori nei
- Perché evitare
var- Lo scope a livello di funzione può causare conflitti in codice complesso.
- L’hoisting può generare comportamenti imprevedibili.
- Nel 2025, i browser moderni supportano appieno
leteconst.
Errori comuni e best practice
- Errore #1: Usare
vardentro blocchi e stupirsi che la variabile sia visibile fuori.
Soluzione: optare perletse serve una variabile valida solo in un blocco. - Errore #2: Utilizzare
letoconstprima della dichiarazione.
Soluzione: dichiarare sempre le variabili in cima allo scope, evitando la Temporal Dead Zone. - Errore #3: Dichiarare una variabile con
constma poi cercare di modificarne il valore.
Soluzione: assicurarsi che la variabile sia realmente costante; in caso di dubbi, meglio usarelet. - Errore #4: Pensare che un oggetto
constnon sia mutabile internamente.
Soluzione: se l’oggetto deve rimanere completamente immutabile, usare tecniche apposite (ad es.Object.freeze()).
Esempi di codice pratici
// Esempio di scope con var
function testVar() {
var x = 10;
if (true) {
var x = 20; // stai sovrascrivendo la stessa variabile
console.log("Dentro if, x =", x); // 20
}
console.log("Fuori if, x =", x); // 20
}
testVar();// Esempio di scope con let
function testLet() {
let y = 10;
if (true) {
let y = 20; // nuova variabile, stesso nome ma scope di blocco
console.log("Dentro if, y =", y); // 20
}
console.log("Fuori if, y =", y); // 10
}
testLet();// Esempio con const
const PI = 3.14;
PI = 3.14159; // Errore: non puoi riassegnare la costante// Oggetto con const
const persona = { nome: "Mario", età: 30 };
persona.età = 31; // OK, l'oggetto è mutabile
persona = { nome: "Luigi", età: 25 }; // Errore: riferimento costanteRisorse esterne e interne per approfondire
- Risorse esterne:
- Link interni (CyberAlchimista):
Conclusioni e checklist mentale
Utilizzare in modo appropriato var let const JavaScript ti permette di ridurre i bug, aumentare la sicurezza e scrivere codice più manutenibile. In sintesi:
constper valori che non cambiano.letse devi riassegnare la variabile.varda evitare: scope e hoisting possono creare confusione.
Checklist finale
- Dichiarare le variabili in cima al blocco o allo scope.
- Usare
constdi default. - Passare a
letse il valore dovrà variare. - Evitare
var, a meno di specifiche necessità legacy.

