Vedo nel codice oa volte la gente ne parla, per qualche codice JavaScript:
(function() {
var something;
function someFunction() {
// some code here
}
// do something
}());
Questa è una "espressione di funzione immediatamente richiamata", o IIFE . Sento spesso che la gente dice "sì, fallo in una chiusura" o "fai questo in una chiusura" nel commento del codice - come se una chiusura "proteggesse la fuga dallo spazio globale".
Ma è questo il concetto corretto? Penso che sia un ambito locale, o un ambito locale anonimo, che scherma qualsiasi variabile locale dalla perdita all'ambito globale. Non ha davvero nulla a che fare con una chiusura, che è una funzione con una catena di portata. Certo, la funzione anonima utilizzata per l'IIFE è una chiusura, ma qui non è rilevante. Se si dice che si desidera una chiusura, è perché si desidera l'accesso all'ambito corrente (e tutti gli ambiti della catena di portata). Per dire, la schermatura della variabile locale nello scope globale "usando una chiusura" non è un concetto corretto, vero?
Aggiornamento: in qualsiasi lingua che non ha una chiusura, come C, puoi ancora fare esattamente la stessa cosa di schermare qualsiasi variabile locale per filtrare nello spazio globale. Quindi non è "chiusura" che sta facendo il lavoro.