2016-09-20 28 views
0

閉鎖:javascriptでクロージャのメモリを解放する方法は?

function test() { 
    var count = 0; 

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

我々はすべて知っているように、counttest()が呼び出された後、解放されないだろう、と今の閉鎖は私には無用である場合、どのように私はそれのメモリを解放するだろうか?

+0

将来、関数で返されたために使用する変数が1つしかない場合は、どのように解放したいですか? – pwolaq

+0

匿名関数から返される値がない場合、匿名関数を返す目的は何ですか?あなたは 'test()'呼び出しによって返された無名関数から 'count'を'返す 'ことを試みていますか? – guest271314

+1

このリンクを参照するとあなたに役立つかもしれません:http://stackoverflow.com/questions/7248122/how-do-you-clear-memory-in-javascript –

答えて

3

javascriptのすべてのオブジェクトは、閉鎖に関与している天気に関係なく、ガベージコレクションされます。あなたが行う場合は、上記のコードでは、:それはxで、後で使用することができるので、

var x = test(); 

は、その後の進路countのためのメモリを解放することはできません。しかし、あなたが行う場合:

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

count用メモリは、ゴミは遅かれ早かれ収集されます。

0

クロージャは、JavaScriptのメモリリークの大きな原因です。

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

ここで、foo()は関数式を返し、do()はcount変数を閉じる。返されるdo()式がいつ呼び出されるかはわかりません。したがってガーベジコレクタはいつメモリを解放するのか理解できません。したがって、使用後に手動で解放する必要があります。

関連する問題