JavaScript クロージャとは: ベスト プラクティス ガイド

クロージャとは、関数内に別の関数を作成することを指し、外部関数が実行されている場合でも、内部関数は外部関数の変数、パラメーター、その他の内部関数にアクセスできます。このメカニズムにより、外部スコープがアクティブでなくなった場合でも、内部関数は外部スコープへの参照を保持できるようになります。

なぜクロージャが重要なのでしょうか?

クロージャは JavaScript において重要な用途と価値を持っています。これらは、プライベート変数の作成、ロジックのカプセル化、地球規模の汚染の回避などに使用できます。さらに、クロージャを使用すると、関数の外側でローカル変数を操作できるため、コードの柔軟性と保守性が向上します。

JavaScript クロージャの特徴

  • クロージャは、外部関数が戻った場合でも、外部関数の変数にアクセスできます。
  • クロージャは、実際の値ではなく、関数の外部の変数への参照を保持します。
  • クロージャは、関数が別の関数内で作成されるたびに作成されます。

JS クロージャの目的

クロージャーは次の目的でよく使用されます。

  • カプセル化 -内部関数は外部変数にアクセスできますが、外部関数は内部変数にアクセスできません。これにより、カプセル化とデータ プライバシーが提供されます。
  • 状態の永続性 - クロージャは関数呼び出し間で状態 (カウンターなど) を永続化できます。関数の変数は呼び出し間で保持されます。
  • 部分的な関数のアプリケーション - クロージャは、部分的な関数のアプリケーションとカリー化された関数に使用できます。これには、一部のパラメーターをキャプチャし、その他のパラメーターを未設定のままにする関数の作成が含まれます。

JS クロージャーの種類

1. 通常休業

通常のクロージャとは、関数が内部で別の関数を定義し、内部関数が外部関数の変数を参照することを意味します。この場合、内部関数は外部関数の変数をキャプチャし、外部関数の実行終了後もそれらの変数を引き続き使用できます。

var outerVar = 'I am from outer'; function inner() { console.log(outerVar); } return inner; } var closureFunction = outer(); closureFunction(); // 输出:I am from outer

2. 即時に呼び出される関数式 (IIFE) クロージャ

IIFE は、クロージャを作成するための一般的なパターンです。関数定義を括弧で囲んですぐに呼び出すことで、実行後も外部スコープにアクセスできる関数を作成できます。

var privateVar = 'I am private'; return function() { console.log(privateVar); }; })(); closureFunction(); // 输出:I am private

実践例: カウンタークローズ

実際の例を通じてクロージャの適用をさらに理解しましょう。クロージャーを使用して実装された単純なカウンターを考えてみましょう。

var count = 0; return function() { return ++count; }; } var counter = createCounter(); console.log(counter()); // 输出:1 console.log(counter()); // 输出:2 console.log(counter()); // 输出:3

インタラクティブな演習

1. 累積和を計算するための閉包関数を作成します。関数の初期値は 0 で、呼び出しごとにパラメータ値が内部変数に蓄積されます。参考回答:

var sum = 0; return function(value) { sum += value; return sum; }; } var sumCalculator = createSumCalculator(); console.log(sumCalculator(5)); // 输出:5 console.log(sumCalculator(10)); // 输出:15 console.log(sumCalculator(2)); // 输出:17 

2. フィボナッチ数列の次の値を生成するための IIFE クロージャを作成します。フィボナッチ数列は 0 と 1 で始まり、後続の各数値は前の 2 つの数値の合計になります。参考回答:

var a = 0; var b = 1; return function() { var next = a + b; a = b; b = next; return next; }; })(); console.log(fibonacciGenerator()); // 输出:1 console.log(fibonacciGenerator()); // 输出:2 console.log(fibonacciGenerator()); // 输出:3

予防

  • クロージャは外部スコープへの参照を保持し、外部スコープ内の変数はガベージ コレクションによって解放できないため、クロージャによってメモリ リークが発生する可能性があります。
  • クロージャを使用するときは、必要のない変数を誤って参照しないように、スコープ チェーンに注意してください。
  • クロージャはブラウザで役立つだけでなく、Node.js サーバーサイド プログラミングでも頻繁に使用されます。

API ツールを使用してバックエンド インターフェイスをデバッグする

Apifox は、Postman よりも強力なインターフェイス テスト ツールです  。Apifox = Postman + Swagger + Mock + JMeter。Apifox は、http(s)、WebSocket、Socket、gRPC、Dubbo およびその他のプロトコルのデバッグ インターフェイスをサポートし、IDEA プラグインを統合 ますバックエンド担当者がサービス インターフェイスの作成を完了すると、Apifox を使用してテスト段階でインターフェイスの正確性を検証でき、グラフィカル インターフェイスによりプロジェクトのオンライン効率が大幅に向上します。

要約する

クロージャは JavaScript の強力で興味深い概念であり、内部関数が外部スコープ内の変数やデータにアクセスできるようにします。クロージャを作成することにより、プライバシー、カプセル化、およびより高度なプログラミング技術を実現できます。クロージャーがどのように機能するかを理解し、実際のプロジェクトに適用すると、JavaScript コードがよりエレガントで強力になります。

知識の拡大:

参考リンク:

おすすめ

転載: blog.csdn.net/m0_71808387/article/details/132447030