JavaScript では、クロージャは関数を指します。2 つの関数が相互にネストされている場合、内側の関数がクロージャになります。典型的なクロージャ本体は、入れ子構造の関数であり、内部関数は外部関数のプライベート メンバーを参照すると同時に、内部関数は外部から参照されます。外部関数が呼び出されるとき、クロージャは次のようになります。形成されました。
このチュートリアルの動作環境: Windows7 システム、JavaScript バージョン 1.8.5、Dell G3 コンピューター。
クロージャとは
いわゆるクロージャは関数を指します。 2 つの関数が相互にネストされている場合、内側の関数はクロージャです。
形成原理
関数が呼び出されると、一時的なコンテキスト アクティブ オブジェクトが生成されます。これは関数スコープの最上位オブジェクトであり、スコープ内のすべてのプライベート メソッド、変数、パラメーター、プライベート関数などはコンテキスト アクティブ オブジェクトの属性として存在します。
関数が呼び出された後、デフォルトでは、システム リソースの占有を避けるために、コンテキスト アクティブ オブジェクトがすぐに解放されます。ただし、関数内のプライベート変数、パラメータ、プライベート関数などが外部から参照されている場合、コンテキスト アクティブ オブジェクトは、すべての外部参照がキャンセルされるまで一時的に存在し続けます。
ただし、関数のスコープは閉じられており、外部からアクセスすることはできません。では、どのような状況下で、外部の世界が関数内のプライベート メンバーにアクセスできるのでしょうか?
スコープ チェーンに従って、内部関数は外部関数のプライベート メンバーにアクセスできます。内部関数が外部関数のプライベート メンバーを参照し、内部関数が外部の世界に渡されるか、外部の世界に開かれている場合、クロージャ本体が形成されます。この外部関数はクロージャ本体です。呼び出された後、アクティブなオブジェクトは一時的にキャンセルされず、そのプロパティは引き続き存在します。外部関数のプライベート メンバーは、内部関数を通じて継続的に読み書きできます。
クロージャ構造
#典型的なクロージャ本体は、入れ子構造の関数です。内部関数は外部関数のプライベート メンバーを参照すると同時に、外部からも内部関数が参照され、外部関数が呼び出されるときにクロージャが形成されます。この関数はクロージャ関数とも呼ばれます。 以下は典型的なクロージャ構造です。function f(x) { //外部函数 return function (y) { //内部函数,通过返回内部函数,实现外部引用 return x + y; //访问外部函数的参数 }; } var c = f(5); //调用外部函数,获取引用内部函数 console.log(c(6)); //调用内部函数,原外部函数的参数继续存在
#クロージャの価値は、式操作中のデータの保存を容易にすることです。ただし、その欠点は無視できません:
以上がJavaScript クロージャとはどういう意味ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。