0
var globalObject = {    
    prop1
    prop2
}

クロージャー内で参照しているグローバルオブジェクトがあります。これにより、メモリリークが発生しますか。

(function(){
      var a;

      function inner1(arg){
        a = arg;
        globalObject .prop1 = dosomething;
      }

      function inner2(){
        globalObject .prop1 = add more properties to prop1
        globalObject .prop2 = dosomething;
        alert(a);
      }

    })();

その後inner2()、サービスコールを求めています。

4

1 に答える 1

0

クロージャースコープにアクセスできる関数をグローバルオブジェクトに割り当てています。したがって、グローバル オブジェクトを介して関数にアクセスできなくなるまで、クロージャ呼び出しの変数環境はガベージ コレクションされません。これは通常、アプリケーションがアンロードされるまで持続します。

これは必ずしもメモリ リークではありません。正当な理由でグローバルオブジェクトを介して関数を利用できるようにしているようで、アクセスできる限り機能することが期待されます。その間、クロージャ内の変数はもちろんメモリに保持する必要があります。

于 2013-01-20T13:32:56.763 に答える