сборка мусора в Javascript - PullRequest
       1

сборка мусора в Javascript

0 голосов
/ 16 марта 2012

Рассмотрим этот многоуровневый вложенный JavaScript-объект.

function foo() {
    var channels = {
        2: {
            name: "station 1", 
            description: "station1",
            img: ["img1-a", "img1-b", "img1-c"]
        },
        3: {
            name: "station 2", 
            description: "station2",
            img: ["img2-a", "img2-b", "img2-c"]
        },
        4: {
            name: "station 3", 
            description: "station3",
            img: ["img3-a", "img3-b", "img3-c"]
        },
    };

    console.log(channels);          
};          
....                
// calling foo.
foo();

После того, как функция foo() вернётся, все вложенные объекты (т.е. отдельные объекты канала, строки, массив img *)1006 *, и строки в массиве img , все будут автоматически собраны сборщиком мусора?

Или мне нужно явно выполнить итерацию и "удалить" каждый объект?

Ответы [ 4 ]

2 голосов
/ 16 марта 2012

Зависит от того, что происходит в console.log.Конечно, в Chrome ссылка на объект channels сохраняется в консоли, поэтому channels не может быть GC'd.

При удалении console.log полный объект channel будетGC'd, потому что нет других ссылок на него.

2 голосов
/ 16 марта 2012

Они имеют право на GC, если на них больше ничего не ссылается.

0 голосов
/ 16 марта 2012

Javascript имеет свой собственный сборщик мусора, реализованный движком браузера (v8 или что-то еще). Вам не нужно освобождать ссылки. Как только рут выйдет из области видимости, все они получат право на gc.

0 голосов
/ 16 марта 2012

Они должны быть, да, потому что больше нет ни ссылки на этот channels объект, ни на замыкание, которое его содержит.

GC, в основном, зависит от браузера, который его реализует, поэтому нет гарантии, что это действительно будет сделано. delete Однако каждый элемент является излишним.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...