1
var GlobalObject = (function(){

    var arr1 = [];
    var arr2 = [];
    var arr3 = [];
    var arr4 = []; 

        return {

         }

})();
  1. では、アプリケーション全体でGlobalObject.arr1をどのように呼び出すのでしょうか。
  2. 私がプッシュアンドポップを行うとき、それはその参照と値を維持しますか?
  3. これによりメモリリークが発生しますか
4

2 に答える 2

2

arr1関数のスコープ内でのみ定義されGlobalObjectます。グローバルにアクセスしたい場合は、GlobalObject関数がそれへの参照を返すようにする必要があります。これをよりよく理解するために、javascript の機能範囲を読んでください。現在、関数は空のオブジェクトを返します。あなたはこのようなことをしたい:

...
return {
   "array1": arr1,
   "array2": arr2,
   "array3": arr3,
   "array4": arr4
};

(ただし、これらの配列を返さないことで、これらの配列のプライバシーを維持できます)

は、手動で参照を解除する ( に設定する) まで、 の参照と値GlobalObjectを維持します。Javascript のガベージ コレクターは、不要になったオブジェクトのみを削除します。arr1null

現在のコードには、メモリ リークはありません。循環参照とクロージャに注意してください。

于 2013-01-24T15:19:00.613 に答える
1
  1. arr1返されたオブジェクトのプロパティの値として公開されていない限り、できません
  2. はい
  3. それはあなたのコードの残りの部分に依存します

(1) の場合、返されるオブジェクトのプロパティの 1 つが配列への参照であることを確認する必要があります。

    // ...
    return {
      whatever: arr1,
      // ...
    };

メモリ リークに関しては、このような設定で特に問題になることはありません。

于 2013-01-24T15:05:45.560 に答える