back to top

Var Let Const JavaScript: differenza e guida completa

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:

  1. Function Scope
    Una variabile dichiarata con var è visibile all’interno della funzione in cui è stata definita. In blocchi come if o for, la variabile rimane accessibile anche all’esterno di quei blocchi.
  2. Hoisting
    Con var, 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, ottenendo undefined senza errori.
  3. 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.

  1. Block Scope
    Sia let che const rispettano lo scope di blocco. Se dichiari una variabile in un if o in un for, rimane disponibile solo all’interno di quelle parentesi graffe.
  2. Temporal Dead Zone
    Sebbene anche let e const siano soggetti a hoisting, se provi a usarli prima della loro dichiarazione ottieni un ReferenceError. Questa finestra si chiama Temporal Dead Zone.
  3. Mutabilità
    • let consente la riassegnazione.
    • const impedisce la riassegnazione, proteggendo il riferimento.
  4. Sicurezza
    • Meno probabilità di bug grazie al block scope.
    • const rende immediatamente chiara l’intenzione di non cambiare un valore.

Tabella comparativa

Caratteristicavarletconst
ScopeFunction scopeBlock scopeBlock scope
RiassegnazioneConsentitaConsentitaNon consentita
RiderichiarazioneConsentita nello stesso scopeNon consentita nello stesso scopeNon consentita nello stesso scope
HoistingSì (accessibile come undefined)Sì (ma con ReferenceError prima della dichiarazione)Sì (ma con ReferenceError prima della dichiarazione)
Uso principaleCompatibilità con vecchio codiceVariabili riassegnabili (cicli, contatori)Variabili costanti di riferimento

Quando usare const, quando preferire let e quando evitare var

  1. const
    • Usalo di default se la variabile non cambia.
    • Ottimo per riferimenti a oggetti e array che non vuoi riassegnare.
  2. let
    • Usalo se sai che il valore cambierà nel corso del blocco (es. contatori nei for, flag booleani, ecc.).
  3. 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 let e const.

Errori comuni e best practice

  • Errore #1: Usare var dentro blocchi e stupirsi che la variabile sia visibile fuori.
    Soluzione: optare per let se serve una variabile valida solo in un blocco.
  • Errore #2: Utilizzare let o const prima della dichiarazione.
    Soluzione: dichiarare sempre le variabili in cima allo scope, evitando la Temporal Dead Zone.
  • Errore #3: Dichiarare una variabile con const ma poi cercare di modificarne il valore.
    Soluzione: assicurarsi che la variabile sia realmente costante; in caso di dubbi, meglio usare let.
  • Errore #4: Pensare che un oggetto const non 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 costante

Risorse esterne e interne per approfondire


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:

  1. const per valori che non cambiano.
  2. let se devi riassegnare la variabile.
  3. var da evitare: scope e hoisting possono creare confusione.

Checklist finale

  • Dichiarare le variabili in cima al blocco o allo scope.
  • Usare const di default.
  • Passare a let se il valore dovrà variare.
  • Evitare var, a meno di specifiche necessità legacy.

Condividi

Articoli Recenti

Categorie popolari