2012-01-05 9 views
9

Un colega mío siempre establece sus variables jQuery para nulo, para disponer de manera efectiva, una vez que haya terminado con, por ejemplo:¿Debería deshacerse de los objetos jQuery?

var bigThing = $(body); 
// ... 
// Do some stuff 
// ... 
bigThing = null; 

¿Es realmente necesario?

+0

posible duplicado de [¿Es una buena práctica establecer las variables como nulas cuando ya no las necesiten?] (Http: // stackoverflow.com/questions/7189809/javascript-set-value-to-null) –

+0

Gracias, sí, esa pregunta es muy similar y tiene una excelente respuesta. – Jay

Respuesta

8

Si encapsula su código en funciones, eso no es necesario, ya que después de que la función finalice, las variables locales se eliminarán de todos modos cuando no se utilice ninguna referencia en otro lugar.

Mantener un selector/variable (almacenamiento en caché) puede tener un efecto positivo si necesita seleccionar lo mismo una y otra vez, seleccionarlo una sola vez y mantener la variable.

0

Aunque no es del todo necesario, esto se puede hacer para garantizar que el GC lo borre en su siguiente ejecución (que de todos modos servirá para todas las asignaciones para las que no tenga siquiera 1 referencia).

En su ejemplo, sin embargo, el $ (cuerpo) objeto (el jQuery extendida objeto, no el cuerpo objeto DOM) se borrará si se establece bigThing a cualquier otra cosa (no necesariamente nulo)

2

No es necesario, pero buena costumbre de eliminar la referencia y liberar la memoria

0

Javascript tiene su propio recolector de basura. Por lo tanto, parece que no necesita deshacerse explícitamente de los objetos.

Pero debido a varias razones, como la mala implementación del recolector de basura, etc., puede suceder que se produzcan algunas pérdidas de memoria.

Al anularlos explícitamente, especifica al navegador que esta memoria debe borrarse en la próxima recolección de elementos no utilizados.

En conclusión, aunque no es necesario hacer esto, será una buena práctica anular los objetos JQuery/javascript.

+5

Creo que "anular un objeto" es un nombre inapropiado. Seguramente anularás la variable; el objeto simplemente es desreferenciado. – PPvG

2

Respuesta breve: no, casi nunca es necesario si está utilizando jQuery.

Depende de lo que hayas hecho con él. Si no conectó ningún manejador de eventos al nodo DOM, el recolector de elementos no utilizados lo eliminará cuando ya no se haga referencia a él.

Pero incluso si adjunta controladores de eventos, jQuery se encargará de ellos en funciones como .remove() y .empty() separando todos los controladores de eventos por usted. Así que mientras uses jQuery para interactuar con el DOM, estás a salvo.

Sin jQuery, si ha adjuntado un controlador de eventos al nodo, el GC no lo borrará, incluso después de haber eliminado el nodo del árbol DOM y ya no tiene ninguna referencia al mismo. Esto se debe a que el nodo DOM contiene una referencia a un objeto JavaScript (es decir, el controlador de eventos) y viceversa. Esto crea una referencia cíclica en dos sistemas separados; algo con lo que la mayoría de los recolectores de basura tienen problemas.

Para obtener más información, le señalo Douglas Crockford's article on Memory Leaks.

Cuestiones relacionadas