Ovviamente il codice così com'è occuperebbe memoria aggiuntiva finché l'elemento DOM è ancora connesso al DOM. Ma suppongo che tu stia chiedendo se continuerà ad usare memoria extra dopo che l'elemento DOM non è più in uso.
Aggiornamento: Grazie per la risposta di Joey (che da allora ha cancellato), ho passato un po 'di tempo leggendo su memory leaks in javascript, e sembra la mia ipotesi nel paragrafo seguente non sono corretti. Poiché gli elementi DOM non utilizzano la garbage collection pura, un riferimento circolare come questo normalmente impedirebbe il rilascio sia dell'elemento DOM sia dell'oggetto javascript. Tuttavia, credo che il resto di questa risposta sia ancora corretto.
Senza una profonda conoscenza di come i motori javascript implementano la garbage collection, non posso parlare autorevolmente sull'argomento. Tuttavia, la mia comprensione generale della garbage collection mi fa pensare che il tuo codice sarebbe "sicuro" nel senso che dopo che l'elemento
#something
è stato rimosso dal DOM, l'oggetto
MyClass
risultante avrebbe solo un riferimento a un oggetto che non ha altre connessioni . Gli algoritmi del grafico del garbage collector dovrebbero essere in grado di identificare che l'elemento DOM e il suo oggetto
MyClass
sono "fluttuanti nello spazio" e non connessi a tutto il resto.
Inoltre, jQuery si impegna a rimuovere i dati e gli eventi associati a un determinato elemento DOM una volta rimosso dal DOM. Dalla documentation:
jQuery assicura che i dati viene rimosso quando elementi DOM vengono rimossi tramite metodi jQuery, e quando l'utente lascia la pagina.
Quindi supponendo che si utilizza jQuery in modo coerente, si avrebbe solo un riferimento a senso una volta che l'oggetto viene rimosso dal DOM in ogni caso, che lo rende
che molto più facile
possibile per il garbage collector per sapere si può ottenere liberarsi di questi oggetti.
Quindi, finché non si dispone di qualcos'altro che fa riferimento all'oggetto MyClass
una volta rimosso l'elemento DOM, non si dovrebbe avere una perdita di memoria.
Perché non si salva il riferimento nell'oggetto js globale? –
@ant_Ti Mi piacerebbe avere un accesso bidirezionale. Ad esempio, in un gestore di eventi vorrei accedere a 'obj', ma vorrei anche poter accedere all'elemento da' obj'. –
Ho modificato la domanda per rimuovere le citazioni di riferimenti circolari, poiché questo esempio non ne contiene uno. (Anche se potrebbe sembrare) – mikerobi