JavaScript : Let vs Var

So che l’argomento è trito e ritrito ma oggi qualcuno ancora fa confusione: che differenza c’è tra dichiarare una variabile con Let e dichiarla con Var?

Come sappiamo in Javascript utilizzare una variabile senza dichiararla equivale a dichiarla globale e, come scrive Douglas Crockford nel suo Javascript the good parts:

forgetting to declare a variable is a very common mistake

Quindi è igienico dichiarare le variabili, se desideriamo che una variabile sia globale la dichiariamo fuori da qualunque funzione, se invece la dichiariamo nel corpo della funzione lo scope sarà locale.

Dichiarare una variabile globale con LET o VAR è esattamente la stessa cosa, dichiarare una variabile locale ad una funzione ha un significato diverso in base al token utilizzato: con VAR la variabile avrà scope di funzione e sarà utilizzabile (nel corpo della funzione) anche nelle righe che precedono la dichiarazione stessa (hoisting), se invece utilizzo LET lo scope sarà limitato al blocco all’interno del quale ho effettuato la dichiarazione e inoltre questa variabile non sarà soggetta all’hoisting.

L’esempio che segue è tratto dal javascript reference manual su developer.mozilla.org:

function varTest() {
  var x = 31;
  if (true) {
    var x = 71;  // same variable!
    console.log(x);  // 71
  }
  console.log(x);  // 71
}

function letTest() {
  let x = 31;
  if (true) {
    let x = 71;  // different variable
    console.log(x);  // 71
  }
  console.log(x);  // 31
}