2013-05-28 11 views
8

Jestem zdezorientowany, ponieważ widziałem kilka różnych komentarzy. Czytam książkę javascript, w której wspomina się, że ustawienie zmiennych globalnych na wartość null jest dobrą praktyką (zakładając, że nie ma innych odniesień), a GC odzyskuje pamięć dla tej zmiennej w następnym cyklu. Widziałem inne komentarze, które mówią, że globalne zmienne nigdy nie są usuwane przez GC.Czy javascript Garbage Collector pozbywa się zmiennych globalnych?

również podczas programowania JavaScript w strukturze OOP, co się dzieje, jeśli mam coś takiego (gdzie gra jest w kontekście globalnym):

var game = {}; 
game.level = 0; 
game.hero = new hero(); 
//do stuff 
game.hero = null; 

Ponieważ bohater mieszka w obiekcie, który jest przechowywany w grze, który jest w kontekście globalnym, jeśli ustawię na przykład hero na zero, czy GC będzie go usuwał?

+2

Być może zechcesz przeczytać [What is JavaScript garbage collection?] (Http://stackoverflow.com/questions/864516/what-is-javascript-garbage-collection?rq=1). –

Odpowiedz

14

Globalne zmienne nigdy nie są usuwane przez GC w tym sensie, że zmienna globalna nadal istnieje. Ustawienie go na null pozwoli jednak na zbieranie pamięci, do której się odwołuje.

E.g.

Przed:

global -> {nothingness} 

Po:

global -> var a -> object { foo: "bar" } 

Ustaw a do null:

global -> var a -> null 

Tutaj, pamięć używana przez obiekt będzie kwalifikował się do kolekcji. Zmienna a nadal istnieje i po prostu odwołuje się do null.

Stwierdzenie, że zmienne globalne nigdy nie są gromadzone, jest nieco mylące. Dokładniejsze może być stwierdzenie, że jakakolwiek pamięć możliwa do śledzenia w kontekście globalnym nie jest obecnie uprawniona do gromadzenia.

W odpowiedzi na twoje pytanie, tak - obiekt bohatera będzie uprawniony do odbioru, ponieważ jego pośrednie połączenie z kontekstem globalnym zostało zerwane.

+0

Dzięki, że to wyjaśniłeś. Zastanawiam się teraz, co by się stało, gdybyś miał 10000 zmiennych w zasięgu globalnym ... – user2000950

+2

Prawdopodobnie niezbyt to źle. Uważa się jednak, że złą praktyką jest zanieczyszczanie globalnej przestrzeni nazw zmiennymi. – izb

Powiązane problemy