私は勉強してTHREE.jsをし、関数がそうのように定義されたパターンに気づきました:
var foo = ( function () {
var bar = new Bar();
return function ( ) {
//actual logic using bar from above.
//return result;
};
}());
(例はレイキャスト法を参照してくださいここに)。
このようなメソッドの通常のバリエーションは次のようになります。
var foo = function () {
var bar = new Bar();
//actual logic.
//return result;
};
最初のバージョンを通常のバリエーションと比較すると、最初のバージョンは次の点で異なっているようです。
- 自己実行関数の結果を割り当てます。
- この関数内でローカル変数を定義します。
- ローカル変数を使用するロジックを含む実際の関数を返します。
したがって、主な違いは、最初のバリエーションではバーは初期化時に1回だけ割り当てられますが、2番目のバリエーションでは、呼び出されるたびにこの一時変数が作成されます。
これが使用される理由についての私の最良の推測は、barのインスタンスの数を制限することです(1つのみ存在します)。これにより、メモリ管理のオーバーヘッドが節約されます。
私の質問:
- この仮定は正しいですか?
- このパターンに名前はありますか?
- なぜこれが使われるのですか?