Czy ktoś może wyjaśnić szczegółowo, w jaki sposób silniki JavaScript radzą sobie z odwołaniami cyklicznymi? Czy istnieje duża różnica między przeglądarkami lub nawet plikiem node.js?Kołowe odwołania w JavaScript/Garbage collector
To, o czym mówię, to wyraźne odwołanie do następnego/następnego obiektu. Na przykład:
var objA = {
prop: "foo",
next: null
};
var objB = {
prop: "foo",
prev: null
};
objA.next = objB;
objB.prev = objA;
Idziemy. Jeśli zrobimy numer console.log(objA)
, zobaczymy, że stworzyliśmy nieskończony łańcuch. Najważniejsze pytanie brzmi: czy to źle? Czy powoduje wycieki pamięci, gdy nie jest jawnie czyszczony?
Więc mamy do
objA.next = null;
objB.prev = null;
lub będzie śmieciarze zająć się nami na konstelacji jak to?
Co na temat http://google-styleguide.googlecode.com/svn/trunk/javascriptguide.xml?showone=Closures#Cosures jest źle? – Sandro
@Sandro ponownie przeczytaj moją odpowiedź. :) Zdrowy GC obsługuje cykle. Wszystko, co jest nowsze niż IE6, można uznać za zdrowe. Jeśli potrzebujesz wsparcia dla IE6, musisz się martwić o jego zepsutą obsługę cykli. Wygląda na to, że przewodnik Google jest napisany przy założeniu, że takie uszkodzone przeglądarki muszą być obsługiwane, więc muszą przejść przez dodatkowe obręcze. – jalf
@Sandro W tym przykładzie dzieje się coś specjalnego: element DOM jest jedną częścią okrągłego odniesienia. Zasadniczo przeciekałbyś pamięć, dopóki nie zamkniesz strony. Jednak jeśli dobrze pamiętam, IE nie zawsze usuwa odniesienia do DOM, kiedy odjeżdżasz. (Wygląda na to, że spowodowało to uszkodzenie stron?) –