Ero veramente felice che ES6 abbia introdotto la parola chiave let
per la definizione delle variabili. Le regole di scoping var
possono portare a tutti i tipi di problemi, specialmente quando si lavora con loop e gestori di eventi. Anche quando i programmatori hanno utilizzato var
in passato, hanno comunque sempre previsto let
delle regole di selezione.
Le variabili dichiarate con var
sono disponibili nell'intera funzione. Le variabili definite con let
sono disponibili solo all'interno del blocco in cui sono dichiarate.
Tuttavia, anche le regole di scoping di var
sono utili a volte, anche se molto raramente. Ecco un esempio: (immagina tutti questi esempi sono all'interno di una funzione, non intendo definire i globali qui)
try {
var result = mightThrowAnException();
//do various things
}
finally {
if (result) cleanup(result);
}
//do other things
callSomeFunction(result); //reference result
return result;
Nell'esempio precedente, la sostituzione di var
con let
causerebbe un errore. Per utilizzare let
, si dovrebbe scrivere una funzione come questa:
let result; //declare the variable outside the braces
try {
result = mightThrowAnException();
//do various things
}
finally {
if (result) cleanup(result);
}
//do other things
callSomeFunction(result); //reference result
return result;
Onestamente penso che scriverlo in questo modo non sia migliore. È peggio quando devi predefinire più variabili come queste, solo perché sono dichiarate in un blocco try
.
In TypeScript, c'è il fastidio aggiuntivo che devi dichiarare esplicitamente il tipo di result
se vuoi predefinirlo in questo modo. Se lo si inizializza, il tipo verrà dedotto automaticamente.
È una buona idea usare var
invece di let
per approfittare di queste regole di scoping, quando in quasi tutte le altre parti del tuo codice usi let
?