この記事では、Javascript
のクロージャについて詳しく説明します 1. クロージャ! ?
クロージャ(クロージャ)はJavaScript言語の難しいところですが、初心者には理解しにくいので、まずはクロージャの意味を見てみましょう。
Baidu 百科事典と「公式」説明: いわゆる「クロージャ」とは、多くの 変数 とこれらの変数をバインドする環境を持つ 式 (通常は 関数) を指します。変数も式の一部です。
Wikipedia: プログラミング言語において、クロージャ (字句クロージャまたは関数クロージャとも呼ばれる) は、第一級関数を使用する言語で字句スコープの名前バインディングを実装するために使用される手法です。
しかし、これらの公式の説明は、地獄の閉鎖が何であるかを明確に理解していないことがわかります。「何を言っているのですか?」という質問だけです。
実際、クロージャは単に関数内で定義されたローカル変数を読み取ることができる関数です。JavaScriptでは、関数内のサブ関数のみがローカル変数を読み取ることができるため、定義された関数の中にクロージャを入れることもできます。関数内。
2. 関数変数クロージャを理解したい場合は、まず関数内の変数を理解する必要があります。これらの変数には独自のスコープがあります。スコープとは何ですか?さて、一般的に言えば、プログラム コードの一部で使用される名前は常に有効/利用可能であるとは限りません。名前の利用可能性を制限するコード スコープは名前のスコープです。
変数のスコープ
には2つあり、1つはグローバル、もう1つはローカルであり、これをグローバル変数とローカル変数と呼びます。var a=50;function fun1(){ alert(a); } fun();
function fun2(){ var a=50; } alert(a);
キーボードコードを入力するとき、関数内のローカル変数を取得する必要がある理由が常にあります。では、「隠された」変数とは何ですか? " 関数内にありますか? ローカル変数の場合は、それらを抽出するメソッドを使用する必要があります。 つまり、関数の中に別の関数を定義します。
function fun3(){ var a=50; function fun4(){ return a; } return fun4(); } //console.log(a); 报错 console.log(fun3());
ここにはもう一つの概念が関係しており、それはチェーンスコープ、いわゆるスコープチェーンです。
スコープ チェーンとは、同じ変数名がスコープ チェーンを生成することを意味します。変数名にアクセスすると、まず現在のスコープに変数が含まれているかどうかが確認され、含まれていない場合は親スコープに移動して変数を見つけます。ここまでで、グローバル変数が見つからない場合は、エラーが報告されます。
そして、関数 fun3 の外で変数 a を呼び出したい場合は、関数 fun3 の中に別の関数 fun4 を定義する必要があります。関数 fun4 の結果は変数 a になります。次に、関数 fun4 に戻り、関数 fun3 を実行します。その結果が変数 a の値になります。 簡単に言うと、fun4を戻り値として使っていれば、その内部変数をfun3の外から読み込むことができます。 4. ローカル変数を呼び出すとき(クロージャを使用して)何に注意する必要がありますか? 1. クロージャにより関数内の変数がメモリに保存され、大量のメモリを消費するため、クロージャを悪用することはできません。そうしないと、Web ページのパフォーマンスが低下します。 2. 親関数内の変数の値をむやみに変更しないでください。 最後に、クロージャは他の関数の内部変数を読み取ることができる関数であり、コードがある場合は、親関数の変数を呼び出すことができます。さらに、予測不可能なコードでは、クロージャを適切に適用する前に、クロージャを本当に理解する必要があります。
以上がJavascriptのクロージャの詳しい説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。