1

私はしばらくの間、モジュールパターンと呼ばれるAddyOsmaniから入手した2つのバージョンのJavaScriptパターンを使用してきました。ここでそれを見る

このパターンの最初のバージョンは、オブジェクトリテラルを使用します。

var x = {
  b: function() {
    return 'text';
  },
  c: function() {
    var h = this.b();
    h += ' for reading';
  }
}
alert(x.b()) // alerts text.

他のバージョンは自己実行機能を使用します:

var y = (function() {
     var first = 'some value';
     var second = 'some other value';
     function concat() {
       return first += ' '+second;
     }

     return {
       setNewValue: function(userValue) {
         first = userValue;
       },
       showNewVal: function() {
         alert(concat());
       }
     }
})();

y.setNewValue('something else');
y.showNewVal();

上記の例を考えると、これらの2つのパターン(イベントリスナーを考慮しない)のどちらかがガベージコレクションに適していますか(それらが自分自身を参照する方法を考えると)?

4

1 に答える 1

1

いいえ。いつ到達できなくなるかについては、違いはありません。

どちらもAPIを所定の位置に固定するグローバル変数を使用するため、フレームがアンロードされて履歴から削除されるまで収集できません。

first2つ目は、追加のアクティベーションフレーム(module-localsおよび)を割り当てて保持しますsecondが、これはかなり小さなコストです。

于 2013-01-14T19:38:32.793 に答える