JS - クロージャとは


私について:



こんにちは、私の名前はオーウェン・ボアハムです.ほとんどの人は私をユーザー名で呼んでいます...「Bobrossrtx」.これを投稿している時点で、私は 15 歳の 10 代で、コンピューター サイエンスの大学への入学を希望しています.とにかく、私についてはそれで十分です.閉鎖について話しましょう...

まとめ
この記事では、クロージャーとは何か、いつ使用するかについて説明します.この知識のすべての功績は、彼のウェブサイト here で確認できます.



閉鎖



クロージャーは、グローバル スコープから変数にアクセスする JavaScript 関数です.たとえば、...

// Lexical environment
let myVar = "Hello World";

// Function
function hello() {
  console.log(myVar); // Captures the myVar variable
}

hello()


コード内の関数を呼び出すために、JS インタープリターは、関数自体と、関数が依存する周囲の環境からのその他のデータについて知る必要があります.

たとえば、それ自体の引数のみに依存する純粋な関数を考えてみましょう.

// No external data
function pureFunc(a, b) {
  return a + b;
}


ここにあるのは、完全に自己完結型の閉じた式です.呼び出されると、それが実行されるコール スタックにプッシュされ、その内部データ (引数) は、コール スタックからポップバックされるまでメモリに保持されます.

しかし、その関数が、グローバル環境や外部関数など、それ自体のスコープ外からデータを参照する場合はどうなるでしょうか.

// Parent scope
let b = 3; // free variable

// This is a Closure
function impureFunc(a) {
  // Function scope
  return a + b; // Captures `b` variable
}


これにより、環境から他の自由変数を参照するオープン式が残ります.インタープリターがこの関数を呼び出し、これらの自由変数の値を知るために、ヒープに格納するクロージャーを作成します.これは、後でアクセスできるメモリ内の場所です.寿命が短い呼び出しスタックとは異なり、ヒープはデータを無期限に保持し、必要がなくなったときにガベージ コレクターを使用してそのデータを削除することを決定できます.

したがって、クロージャーは単なる関数ではなく、外部の状態またはレキシカル環境と組み合わされた関数です.クロージャーは、純粋な関数よりも多くのメモリと処理能力を必要としますが、それらを使用する多くの実際的な理由に気付くでしょう.

ソーシャル
ツイッター:
ユーチューブ:
メディア: @bobrossrtx
開発者:
ギットハブ: @bobrossrtx