2016-09-20 3 views
0

Затвор:как освободить память закрытия в javascript?

function test() { 
    var count = 0; 

    return function() { 
    count++; 
    }; 
} 

Как мы все знаем, count не будет выпускать после test() называться, и теперь, если замыкание бесполезно для меня, как я мог бы освободить память о нем?

+0

Что вы хотите отпустить, если есть только одна переменная, которую вы собираетесь использовать в будущем, потому что вы вернули ее в функцию? – pwolaq

+0

Какова цель возврата анонимной функции, когда никакое значение не возвращается из анонимной функции? Вы пытаетесь 'return'' count' от анонимной функции, возвращаемой 'test()' call? – guest271314

+1

ссылка эта ссылка может быть полезна для вас: http://stackoverflow.com/questions/7248122/how-do-you-clear-memory-in-javascript –

ответ

3

Все объекты в javascript - сборщик мусора, независимо от погоды, в которой они участвуют в закрытии или нет. В коде выше, если вы:

var x = test(); 

тогда, конечно, память для count не может быть освобожден, поскольку он может быть использован позже x. Однако, если вы:

var x = test(); 
x = ""; 

память для count будет мусор, рано или поздно.

0

Закрытие - это массивный источник утечек памяти в JavaScript.

function foo() { 
    var count = 0; 
    function do() { 
    return count++; 
    } 
    return { 
    do: do} 
    } 

Здесь foo() возвращает выражение функции do и do() имеет замыкание по переменной count. Мы не знаем, когда будет вызываться выражение return(). Поэтому сборщик мусора не может понять, когда выпустить память. Поэтому нам нужно вручную освободить его после его использования.

Смежные вопросы