Qual è la durata di una variabile in JavaScript, dichiarata con "var". Sono sicuro, non è sicuramente secondo le aspettative.Durata delle variabili JavaScript
<script>
function(){
var a;
var fun=function(){
// a is accessed and modified
}
}();
</script>
Ecco come e quando fa spazzatura JavaScript raccoglie la variabile a
? Poiché a
è una parte della chiusura della funzione interna, idealmente non dovrebbe mai raccogliere i dati inutili, poiché la funzione interna fun
può essere passata come riferimento a un contesto esterno. Quindi fun
dovrebbe essere ancora in grado di accedere a a
dal contesto esterno.
Se la mia comprensione è corretta, come avviene la raccolta di dati inutili allora, e come garantisce di avere abbastanza spazio di memoria, dal momento che mantenere tutte le variabili in memoria fino a quando l'esecuzione del programma potrebbe non essere sostenibile?
Questa è una bella domanda tra. Sottolinea che la chiusura stessa non è l'unica cosa che viene tenuta in memoria fino a quando la chiusura non viene eseguita in GC. Lo è anche l'intera catena di visibilità della funzione. Sembra che ci sia qualche controversia, ma qualche pensiero aggiuntivo sembrerebbe indicare che ogni dichiarazione di funzione in JavaScript è una chiusura, relativa all'ambito globale. Tuttavia c'è un'eccezione [vedi questa risposta] (http://stackoverflow.com/a/30252865/511795) – Shanimal