1

誰かが、即時実行関数または自己実行関数はスタック全体を保存する必要があると述べました。これは本当ですか...もしそうなら、モジュールパターン(即時関数に基づく)とプレーン関数のようなものを使用することの長所と短所は何ですか?

関数は本質的に非公開ですが、公開したいアイテムを返すことができるため、プライバシーを処理できます。

私が見る主な違いは、グローバルなインポートがないこと、または開発者(私が待っている)が関数で new を使用することを確認する機能がないことです(または複雑です)。

一般に、プライバシーと状態を提供しようとするとき、いつモジュールパターンを使用し、いつ単純な関数を使用する必要がありますか?

2 つ目の質問は、new を使用したときに関数が状態を提供するかどうかです。

4

1 に答える 1

2

内部に変数または関数への永続的な参照があるために持続する関数クロージャは、ある程度のメモリを占有します。今日のコンピュータ(電話でさえ)では、何千回もそれを繰り返さない限り、この量のメモリは一般的に重要ではありません。したがって、言語機能を使用して設計上の問題を解決することは、通常、このメモリ量を心配するよりも重要です。

「スタック全体」と言うと、最上位の自己実行関数の呼び出しスタックは非常に小さいです。呼び出されている1つの関数を除いて、スタックには実際には何もありません。

関数もオブジェクトです。したがって、と一緒に使用するとnew、これらのプロパティに値を割り当てると、状態(プロパティ)を持つことができる新しいオブジェクトが作成されます。これは、JavaScriptでオブジェクトを作成する主な方法の1つです。関数を呼び出してその戻り値を調べるか、関数を一緒に使用してnew、関数を新しいオブジェクトのコンストラクターとして機能させることができます。特定の関数は通常、両方ではなく、いずれかの方法で使用されるように設計されています。

モジュールパターンは通常、どの変数をパブリックにするかを制御するために使用され、パブリックにするときに、最上位のグローバル変数をほとんど使用しない構造化名前空間に配置するために使用されます。同じ問題を実際には解決しないため、自己実行関数の代わりに選択するものではありません。モジュールパターンの詳細については、http ://www.yuiblog.com/blog/2007/06/12/module-pattern/を参照してください。

ここでいくつかのオプションについて読むことができます:http ://www.adequatelygood.com/2010/3/JavaScript-Module-Pattern-In-Depthおよびhttp://www.klauskomenda.com/code/javascript-programming -パターン/

解決しようとしている特定の問題や特定の設計の問題に照らして、特定の手法の長所/短所を議論する方が、質問したことが実際にはない場合に一般的な議論よりも簡単です。同等の問題を解決します。

保護されたメンバーとプライベートメンバー(javascriptにハッキングされる可能性がありますが、コア言語機能ではありません)について私が知っている最良のリファレンスは、これです:http: //javascript.crockford.com/private.html。言語のデフォルトのプロトタイプ機能の代わりにこのメソッドを使用すると、トレードオフが発生しますが、本当に必要な場合はプライバシーを確​​保できます。ただし、JavaScriptはプライベートメソッドまたは保護されたメソッドを念頭に置いて構築されていないことを知っておく必要があります。そのため、そのレベルのプライバシーを取得するには、コードを記述してそれを取得する方法についていくつかの規則を使用しています。

于 2012-05-20T00:38:43.917 に答える