Javascriptのクロージャの詳しい説明

高洛峰
リリース: 2017-03-12 11:22:04
オリジナル
1114 人が閲覧しました

この記事では、Javascript

のクロージャについて詳しく説明します 1. クロージャ! ?

クロージャ(クロージャ)はJavaScript言語の難しいところですが、初心者には理解しにくいので、まずはクロージャの意味を見てみましょう。

Baidu 百科事典と「公式」説明: いわゆる「クロージャ」とは、多くの 変数 とこれらの変数をバインドする環境を持つ (通常は 関数) を指します。変数も式の一部です。

Wikipedia: プログラミング言語において、クロージャ (字句クロージャまたは関数クロージャとも呼ばれる) は、第一級関数を使用する言語で字句スコープの名前バインディングを実装するために使用される手法です。

しかし、これらの公式の説明は、地獄の閉鎖が何であるかを明確に理解していないことがわかります。「何を言っているのですか?」という質問だけです。

実際、クロージャは単に関数内で定義されたローカル変数を読み取ることができる関数です。JavaScriptでは、関数内のサブ関数のみがローカル変数を読み取ることができるため、定義された関数の中にクロージャを入れることもできます。関数内。

2. 関数変数

クロージャを理解したい場合は、まず関数内の変数を理解する必要があります。これらの変数には独自のスコープがあります。スコープとは何ですか?さて、一般的に言えば、プログラム コードの一部で使用される名前は常に有効/利用可能であるとは限りません。名前の利用可能性を制限するコード スコープは名前のスコープです。

変数のスコープ

には2つあり、1つはグローバル、もう1つはローカルであり、これをグローバル変数とローカル変数と呼びます。

var a=50;function fun1(){
    alert(a);
}
fun();
ログイン後にコピー


上記のコードでは、 a が関数の外で定義されているため、関数内で変数 a を呼び出すと自然にその値を読み取ることができます。ここでの をグローバル変数と呼びます。


function fun2(){
    var a=50;
}
alert(a);
ログイン後にコピー


このコードでは、関数内で a を定義し、関数の外で a が呼び出されると、エラーが報告され、「a が定義されていない」ことがわかります。 ?を定義しましたか?もちろん定義済みです!それはローカル変数であるというだけです。


3. 関数内で「隠された」変数を見つける方法

キーボードコードを入力するとき、関数内のローカル変数を取得する必要がある理由が常にあります。では、「隠された」変数とは何ですか? " 関数内にありますか? ローカル変数の場合は、それらを抽出するメソッドを使用する必要があります。 つまり、関数の中に別の関数を定義します。

function fun3(){
    var a=50;
    function fun4(){
        return a;
    }
    return fun4();
}
//console.log(a); 报错
console.log(fun3());
ログイン後にコピー


上記のコードでは、変数 a を fun3 に定義しました。そのため、関数 fun3 の外で a を呼び出すと、それが見つからないというエラーも報告され、関数 fun4 についてはエラーが報告されます。関数 fun3 の内部 つまり、 a は関数 fun4 の外部にあるため呼び出すことができます。 逆に、変数が fun4 に定義されている場合、 fun3 は呼び出すことができません。


ここにはもう一つの概念が関係しており、それはチェーンスコープ、いわゆるスコープチェーンです。

スコープ チェーンとは、同じ変数名がスコープ チェーンを生成することを意味します。変数名にアクセスすると、まず現在のスコープに変数が含まれているかどうかが確認され、含まれていない場合は親スコープに移動して変数を見つけます。ここまでで、グローバル変数が見つからない場合は、エラーが報告されます。

そして、関数 fun3 の外で変数 a を呼び出したい場合は、関数 fun3 の中に別の関数 fun4 を定義する必要があります。関数 fun4 の結果は変数 a になります。次に、関数 fun4 に戻り、関数 fun3 を実行します。その結果が変数 a の値になります。

簡単に言うと、fun4を戻り値として使っていれば、その内部変数をfun3の外から読み込むことができます。

4. ローカル変数を呼び出すとき(クロージャを使用して)何に注意する必要がありますか?

1. クロージャにより関数内の変数がメモリに保存され、大量のメモリを消費するため、クロージャを悪用することはできません。そうしないと、Web ページのパフォーマンスが低下します。

2. 親関数内の変数の値をむやみに変更しないでください。


最後に、クロージャは他の関数の内部変数を読み取ることができる関数であり、コードがある場合は、親関数の変数を呼び出すことができます。さらに、予測不可能なコードでは、クロージャを適切に適用する前に、クロージャを本当に理解する必要があります。


以上がJavascriptのクロージャの詳しい説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!