閉鎖:javascriptでクロージャのメモリを解放する方法は?
function test() {
var count = 0;
return function() {
count++;
};
}
我々はすべて知っているように、count
はtest()
が呼び出された後、解放されないだろう、と今の閉鎖は私には無用である場合、どのように私はそれのメモリを解放するだろうか?
閉鎖:javascriptでクロージャのメモリを解放する方法は?
function test() {
var count = 0;
return function() {
count++;
};
}
我々はすべて知っているように、count
はtest()
が呼び出された後、解放されないだろう、と今の閉鎖は私には無用である場合、どのように私はそれのメモリを解放するだろうか?
javascriptのすべてのオブジェクトは、閉鎖に関与している天気に関係なく、ガベージコレクションされます。あなたが行う場合は、上記のコードでは、:それはx
で、後で使用することができるので、
var x = test();
は、その後の進路count
のためのメモリを解放することはできません。しかし、あなたが行う場合:
var x = test();
x = "";
count
用メモリは、ゴミは遅かれ早かれ収集されます。
クロージャは、JavaScriptのメモリリークの大きな原因です。
function foo() {
var count = 0;
function do() {
return count++;
}
return {
do: do}
}
ここで、foo()は関数式を返し、do()はcount変数を閉じる。返されるdo()式がいつ呼び出されるかはわかりません。したがってガーベジコレクタはいつメモリを解放するのか理解できません。したがって、使用後に手動で解放する必要があります。
将来、関数で返されたために使用する変数が1つしかない場合は、どのように解放したいですか? – pwolaq
匿名関数から返される値がない場合、匿名関数を返す目的は何ですか?あなたは 'test()'呼び出しによって返された無名関数から 'count'を'返す 'ことを試みていますか? – guest271314
このリンクを参照するとあなたに役立つかもしれません:http://stackoverflow.com/questions/7248122/how-do-you-clear-memory-in-javascript –