Выражение «анонимный объект JavaScript» немного странно. Объекты JavaScript - это просто объекты и не имеют имен сами по себе. К ним могут относиться или не ссылаться другие вещи, включая, но не ограничиваясь ими, переменные, которым они были назначены. Например, рассмотрим следующий случай:
function make_getter(obj) { return function(p) { return obj[p]; }; }
var getter = make_getter({a: 1});
Здесь {a: 1}
является «анонимным», но его называют, в силу того накрыла, в функции, возвращаемый make_getter
и присвоенного getter
, Покуда getter
все еще находится в сфере охвата, поэтому объект не может (и не будет) собираться мусором.
Независимо от того, связан ли объект с мусором, связан ли он с ссылкой на какой-либо контекст в реальном времени, а не только на то, назначен ли он переменной. он может быть назначен переменной, но вышел из сферы действия; или он может не назначаться переменной, но сохраняться в некоторой области.
Как упоминалось в других сообщениях, фактический GC происходит, когда и если двигатель чувствует себя так, и вам не нужно или не нужно его контролировать.
Иначе говоря, эти два фрагмента ниже идентичны с точки зрения GC:
function gc1() {
return {a:1, b:2, c:3}['a'];
}
function gc2() {
var o = {a:1, b:2, c:3};
return o['a'];
}
Никто не заботится случилось ли вам дали имя o
к объекту. Вопрос в том, когда он выходит за рамки, что в этом случае происходит в конце функции.
Все занимает память. Затем он освобождается, а спустя некоторое время собирают мусор.Сбор мусора зависит от реализации (например, механизма javascript, используемого в конкретном браузере) и поэтому не может быть угадан. Не беспокойтесь об этом, просто используйте их по мере необходимости. –
Это деталь реализации. Я бы предположил, что большинство современных двигателей оптимизируют объект, учитывая этот простой пример. Есть ли у вас более реальный пример? –
@squint * Could * .. не так уверен, что «делай», поскольку это довольно редкий случай использования. (Но есть некоторые * впечатляющие * front-end оптимизации). – user2864740