クロージャは JavaScript の基本的な考え方ですが、初心者にとっては曖昧で理解しにくいと感じるかもしれません。特に、ECMA 標準の定義は、実際の経験がなければ理解するのが難しい場合があります。そのため、この投稿ではクロージャの概念を長々と説明するのではなく、実際のコードを使用して理解しやすくします。
function A(name){ function B(){ console.log(name); } return B; } var C = A("Closure"); C();//Closure
これは最も単純なクロージャーです。
基本を理解したので、これが一般的な関数とどのように異なるかを簡単に検討してみましょう。以下は、前述のコードが自然言語に翻訳されるとどのように表示されるかを示します:
関数 A 内の関数 B と変数名は、関数 A の外の変数 C によって参照されています。
少し変更を加えると、このステートメントはクロージャを次のように定義します。
内部関数が外部関数の外部の変数によって参照される場合、クロージャが形成されます。
したがって、上記の 5 つの操作を実行するとクロージャが定義されます。クロージャーの使用法
JavaScript では、オブジェクトが参照されなくなった場合、そのオブジェクトは GC によって再利用され、それ以外の場合はメモリ内に保持され続けます。
上記の例では、B は A 内で定義されているため、B は A に依存しており、外部変数 C が B を参照しているため、A は C によって間接的に参照されています。つまり、A は GC によって収集されず、メモリ内に保持され続けます。この推論を証明するために、上記の例を少し改良してみましょう。
function A(){ var count = 0; function B(){ count ++; console.log(count); } return B; } var C = A(); C();// 1 C();// 2 C();// 3
カウントがリセットされないのはなぜですか?
開閉機構:
以上が[JavaScript] クロージャを数秒で理解するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。