JavaScriptの閉鎖は、プライベート変数を作成し、状態を維持するための強力なメカニズムです。内側の関数は、外側関数が実行が終了した後でも、外側(囲まれた)関数の変数とパラメーターにアクセスできるためです。これにより、外の世界から効果的に隠されているデータを作成できます。
例で説明しましょう:
<code class="javascript">function counter() { let count = 0; // Private variable return { increment: function() { count ; return count; }, decrement: function() { count--; return count; }, getValue: function() { return count; } }; } let myCounter = counter(); console.log(myCounter.increment()); // Output: 1 console.log(myCounter.increment()); // Output: 2 console.log(myCounter.decrement()); // Output: 1 console.log(myCounter.getValue()); // Output: 1 console.log(myCounter.count); // Output: undefined (count is private)</code>
この例では、 count
counter
関数内で宣言されているため、私的変数です。内部関数( increment
、 decrement
、 getValue
)は、 count
の周りに閉鎖を形成し、アクセスして変更できるようにします。ただし、 count
はcounter
関数の外側から直接アクセスできません。これは、私有国を管理するための閉鎖の効果的な使用を示しています。返されたオブジェクトはインターフェイスとして機能し、そのメソッドを介してプライベート変数への制御アクセスを公開します。このパターンは、カプセル化された保守可能なコードを作成するための基本です。
閉鎖は強力ですが、慎重に使用されないと落とし穴につながる可能性があります。
閉鎖は、モジュール式および再利用可能なコンポーネントを作成するのに最適です。閉鎖内の状態と動作をカプセル化することにより、競合や意図しない副作用の名前を心配することなく、アプリケーションのさまざまな部分で簡単に再利用できる自己完結型モジュールを作成します。
ロギングのための再利用可能なモジュールのこの例を考えてみましょう。
<code class="javascript">function createLogger(prefix) { return function(message) { console.log(`${prefix}: ${message}`); }; } const errorLogger = createLogger('ERROR'); const infoLogger = createLogger('INFO'); errorLogger('Something went wrong!'); // Output: ERROR: Something went wrong! infoLogger('System is running smoothly.'); // Output: INFO: System is running smoothly.</code>
ここで、 createLogger
ログ機能を返す機能ファクトリです。内側の関数は、 prefix
パラメーターの閉鎖を形成し、プレフィックスをロガーの内部状態の部分にします。これにより、懸念のきれいな分離を維持し、再利用性を促進しながら、さまざまな接頭辞を備えた複数のロガーを作成できます。このパターンは非常に適応性があり、さまざまな種類の再利用可能なコンポーネントに適用できます。
はい、JavaScriptの閉鎖は、最初の例で示されているように、関数の範囲外から効果的にプライベートでアクセスできない変数を作成できます。ただし、JavaScriptが他の言語(JavaやCなど)と同じ方法で真のプライベートメンバーがないことを理解することが重要です。通常の手段で変数をアクセスできないものにすることはできますが、決定された開発者は、JavaScriptエンジンの内部作業を反射したり操作したりする手法を使用して、潜在的にそれらにアクセスする可能性があります(ただし、これは一般的に落胆し、良い実践とは見なされません)。
閉鎖によって提供される「プライバシー」は、慣習とカプセル化に基づいています。それは、設計を回避しようとしない、意図した使用を順守している開発者に依存しています。ほとんどの実用的な目的のために、閉鎖によって提供されるプライバシーのレベルは、データを保護し、コードの整合性を維持するのに十分です。プライバシーを確保するための最良の方法は、堅牢なコーディングプラクティスと明確に定義されたインターフェイスを使用することです。ゲッターとセッターの使用(最初の例に示すように)は、この制御されたアクセスをさらに強化します。
以上がJavaScriptで閉鎖を効果的に使用してプライベート変数を作成し、状態を維持するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。