Originariamente inviato da American
Ma quello delle closures comunque è un fenomeno di tutti i linguaggi, mica solo di JS, giusto?
No, non di tutti. Se ad esempio programmi in bash e dichiari una funzione dentro un'altra funzione la funzione annidata verrà comunque salvata nel global scope. Tra l'altro quella di usare la sintassi seguente per non "sporcare" il global scope:

codice:
(function () {
	var variabileLocale1 = "Ciao";
	var variabileLocale2 = "Mondo";
	// etc. etc.
})();
è solo una prassi dovuta all'esistenza di un browser come Internet Explorer, che non supporta l'operatore let. La via "ufficiale" (nonché la meno dispendiosa e la più performante) per il block scoping in JavaScript è infatti la seguente:

codice:
<script type="application/javascript;version=1.7">

var esempio = "Ciao";

let (esempio) {

	esempio = "Mondo";
	alert(esempio); // "Mondo"

}

alert(esempio) // "Ciao"

</script>