Qualcuno può spiegare in dettaglio in che modo i motori Javascript gestiscono riferimenti circolari? C'è una grande differenza tra i browser o anche node.js?Riferimenti circolari in Javascript/Garbage collector
Quello di cui sto parlando è un esplicito riferimento indietro/successivo all'interno degli oggetti. Ad esempio:
var objA = {
prop: "foo",
next: null
};
var objB = {
prop: "foo",
prev: null
};
objA.next = objB;
objB.prev = objA;
Ci siamo. Se facciamo un console.log(objA)
possiamo vedere che abbiamo creato una catena infinita. La grande domanda è, è così male? Crea perdite di memoria quando non viene pulito in modo esplicito?
Quindi dobbiamo
objA.next = null;
objB.prev = null;
o saranno i netturbini prendersi cura di noi su costellazioni come questo?
Che dire di http://google-styleguide.googlecode.com/svn/trunk/javascriptguide.xml?showone=Closures#Closures è sbagliato? – Sandro
@Sandro leggi di nuovo la mia risposta. :) Un GC corretto gestisce i cicli bene. Tutto ciò che è più nuovo di IE6 può essere considerato sano di mente. Se è necessario supportare IE6, è necessario preoccuparsi della sua gestione dei cicli interrotta. Apparentemente, la guida di Google è stata scritta partendo dal presupposto che tali browser danneggiati devono essere supportati, quindi devono passare attraverso alcuni loop aggiuntivi. – jalf
@Sandro C'è qualcosa di speciale in questo esempio: un elemento DOM è una parte del riferimento circolare. In generale, si perderebbe memoria fino a chiudere la pagina. Se ricordo correttamente, tuttavia, IE non rimuove sempre i riferimenti al DOM quando si naviga. (Apparentemente facendo questo ha rotto alcune pagine?) –