2010-04-22 24 views
8

Cuál es la vida útil de una variable en JavaScript, declarada con "var". Estoy seguro, definitivamente no está de acuerdo con las expectativas.Vida útil de las variables de JavaScript

<script> 
function(){ 
    var a; 
    var fun=function(){ 
    // a is accessed and modified 
    } 
}(); 


</script> 

Aquí cómo y cuándo JavaScript recoger la basura la variable a? Dado que a es una parte del cierre de la función interna, lo ideal es que nunca se recoja la basura, ya que la función interna fun se puede pasar como referencia a un contexto externo. Por lo tanto, fun aún debe poder acceder al a desde el contexto externo.

Si mi comprensión es correcta, ¿cómo ocurre la recolección de basura entonces, y cómo se asegura tener suficiente espacio de memoria, ya que mantener todas las variables en la memoria hasta la ejecución del programa podría no ser sostenible?

+0

Esta es una gran pregunta por cierto. Señala que el cierre en sí mismo no es lo único que se conserva en la memoria hasta que se cierra el cierre del GC. Toda la cadena de alcance de la función también lo es. Parece haber cierta controversia, pero algunos pensamientos adicionales parecen indicar que cada declaración de función en JavaScript es un cierre, en relación con el alcance global. Sin embargo, hay una excepción [consulte esta respuesta] (http://stackoverflow.com/a/30252865/511795) – Shanimal

Respuesta

4

La especificación ECMAScript no especifica cómo debería funcionar el recolector de basura, solo dice que si se puede acceder a un identificador (a través de un puntero directo o un cierre), no debe ser GCed.

Salida this artículo sobre el identificador de resolución, cierres, el alcance y el encadenamiento de recolección de basura en ECMAScript.

creo que sirve

1

'a' no será recolección de basura todo el tiempo, ya que hay referencias externas a 'diversión'. El navegador garantiza que tiene suficiente memoria pidiendo más memoria del sistema operativo.

+0

"El navegador garantiza que tiene suficiente memoria solicitando más memoria del SO". - jaja ... bastante bien :-) – osa

Cuestiones relacionadas