Scoping
Questo è un articolo che fa parte di una guida su ES6
Block-Scoped Variables
In ES6 possiamo dichiarare le variabili oltre che con CONST anche con LET.
Vediamo di capire che differenze ci sono tra var e let.
Se consideriamo il seguente snippet di codice possiamo vedere come
- var dichiara una variabile disponibile a livello di scope ( ricordiamoci che in javascript uno scope è generato da una funzione )
- let rende disponibile la variabile a livello di blocco ( ricordiamoci che in javascript un blocco è generato da due parentesi graffe {}, da non confondere con un oggetto! )
var varUno = “varUno”;
let letUno = “letUno”;function f1() {
if (true) {
var varDue = “varDue”;
let letDue = “letDue”;
}
console.log(varUno);
console.log(varDue);
console.log(letUno);
console.log(letDue);
}f1();Get Tommaso Rossi’s stories in your inbox
Join Medium for free to get updates from this writer.
L’ output del jsbin qua sotto mostra un errore che è relativo al tentativo di stampar e console il valore della variabile letDue, ma questa è disponibile soltanto all’interno del blocco in cui è dichiarata e quindi al di fuori dell’ if (true) non esiste.
Block-scoped Functions
Cosa del tutto analoga avviene con le funzioni, adesso possiamo fare a meno delle closure!
//ES6
{
function f1 () { return 1 }
f1() === 1
{
function f1 () { return 2 }
f1() === 2
}
f1() === 1
}//In ES5 usando una closure
(function () {
var f2 = function () { return 1; }
foo() === 1;
(function () {
var f2 = function () { return 2; }
f2() === 2;
})();
f2() === 1;
})();








