ホームページ > 記事 > ウェブフロントエンド > クロージャの適用シナリオは何ですか?
クロージャ アプリケーションのシナリオには次が含まれます: 1. 関数参照を使用した SetTimeout 呼び出し; 2. グローバル変数を小さいスコープで置き換える; 3. プライベート変数およびプライベート関数にアクセスできるパブリック メソッド。
関数内のローカル変数には関数外からアクセスできませんが、関数内の関数はこの関数内のローカル変数にアクセスできるため、関数への外部アクセスは可能です。これは、関数内のローカル変数のクロージャーによって実現されます。ただし、メモリ リークが発生しやすいため、使用には注意が必要です。
クロージャの使用シナリオ:
1]、関数参照メソッドを使用した setTimeout 呼び出し
setTimeout の最初のパラメータは通常、対象となる関数です。実行されると、2 番目のパラメータは遅延時間になります。
コードの一部を setTimeout を通じて呼び出したい場合は、最初のパラメーターとして関数オブジェクトへの参照を渡す必要がありますが、この関数オブジェクトへの参照は、呼び出されるオブジェクトのパラメーターを提供できません。遅延。このとき、別の関数を呼び出して内部関数への呼び出しを返し、setTimeout関数に内部関数オブジェクトの参照を渡すことができ、内部関数実行時に必要なパラメータは外部関数呼び出し時に渡されます。 setTimeout は、内部関数の実行時に使用されます。内部関数は、外部関数の呼び出し時に指定されたパラメータの偽造を防ぐことができるため、パラメータを渡す必要はありません。
2]、グローバル変数の代わりに小さなスコープ3]、プライベートにアクセスするための特権メソッド変数?
特権メソッド: プライベート変数およびプライベート関数にアクセスできるパブリック メソッドプライベート変数には次のものが含まれます: 1)、ローカル変数 2) 関数のパラメータ 3) 関数内で定義されたその他の関数 (クロージャ) 上記コードのコンストラクタには 2 つが定義されています。 特権メソッド: getName()、setName()、これら 2 つのメソッドはオブジェクトを介してアクセスでき、どちらもプライベート変数名にアクセスできますが、Person コンストラクターの外部に名前にアクセスするメソッドはありません。これら 2 つのメソッドは関数内で定義されているため、スコープ チェーンを介してクロージャとしてアクセスできます。以上がクロージャの適用シナリオは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。