JavaScriptのクロージャとは何ですか?どのように機能しますか?



JavaScriptのクロージャは、関数が作成されるたびに、関数の作成時に作成されます。それらを使用するとき、それはコードのより良い制御を提供します。

は、ユーザーに多くの自由を与える機能指向の言語です。関数を動的に作成したり、別の変数にコピーしたり、引数として別の関数に渡して、後で別の場所から呼び出すことができます。 JavaScriptのクロージャは、関数が作成されるたびに、関数の作成時に作成されます。この記事では、次の順序でクロージャを理解します。

JavaScriptでのクロージャの概要

クロージャは、 関数 周囲の状態、つまり語彙環境への参照と一緒にバンドルされています。つまり、クロージャは、内部関数から外部関数のスコープへのアクセスを提供します。





コーダー-javascriptのクロージャ-edureka

ほとんどの開発者は、JavaScriptでクロージャを意識的または無意識に使用しています。それらを使用するとき、それはコードのより良い制御を提供します。また、それはいずれかの中で最もよくある質問です 。



例:

function foo(){var x = 10 function inner(){return x} return inner} var get_func_inner = foo()console.log(get_func_inner())console.log(get_func_inner())console.log(get_func_inner())

出力:

10
10
10



マージソートの実装c ++

ここでは、にアクセスできます 変数 xは、関数foo()から関数inner()で定義され、後で関数を囲む関数の実行時に関数を囲むスコープチェーンを保持します。したがって、内部関数は、スコープチェーンを通じてxの値を認識します。これは、JavaScriptでクロージャを使用する方法です。

実用的な閉鎖

クロージャを使用すると、字句環境をそのデータを操作する関数に関連付けることができます。これは明らかに類似しています オブジェクト指向プログラミング 、オブジェクトを使用すると、オブジェクトのプロパティを1つ以上のメソッドに関連付けることができます。

したがって、通常は単一のメソッドのみでオブジェクトを使用する可能性のある場所であればどこでもクロージャを使用できます。

例:

Javaで最小ヒープを実装する
function makeSizer(size){return function(){document.body.style.fontSize = size + 'px'}} var size12 = makeSizer(12)var size14 = makeSizer(14)var size16 = makeSizer(16)

上記の例は通常、コールバックとして添付されます。イベントに応答して実行される単一の関数です。

スコープチェーン

JavaScriptのクロージャには、次の3つのスコープがあります。

  • ローカルスコープ
  • 外部機能の範囲
  • グローバルスコープ

よくある間違いは、外部関数自体がネストされた関数である場合、外部関数のスコープへのアクセスに外部関数の囲んでいるスコープが含まれ、関数スコープのチェーンが効果的に作成されることを認識していないことです。

//グローバルスコープvarx = 10 function sum(a){return function(b){return function(c){//外部関数scope return function(d){//ローカルスコープreturn a + b + c + d + x}}}} console.log(sum(1)(2)(3)(4))//ログ20

また、匿名関数なしで作成することもできます。

//グローバルスコープvarx = 10 function sum(a){return function sum2(b){return function sum3(c){//外部関数scope return function sum4(d){//ローカルスコープreturn a + b + c + d + x}}}} var s = sum(1)var s1 = s(2)var s2 = s1(3)var s3 = s2(4)console.log(s3)// log 20

上記の例では、すべてが関数の外部スコープにアクセスできる一連の入れ子関数があります。したがって、クロージャは、宣言されたすべての外部関数スコープにアクセスできると言えます。

ループ内のクロージャ

JavaScriptでクロージャを使用して、匿名関数をインデックスのすべてのインデックスに格納できます。 アレイ 。例を見て、ループ内でクロージャがどのように使用されるかを見てみましょう。

例:

メソッドのオーバーロードとメソッドのオーバーライドとは
関数outer(){var arr = [] var i for(i = 0 i<3 i++) { // storing anonymus function arr[i] = function () { return i } } // returning the array. return arr } var get_arr = outer() console.log(get_arr[0]()) console.log(get_arr[1]()) console.log(get_arr[2]())

出力:

3
3
3
3

これで、記事は終わりです。 JavaScriptのクロージャがどのように機能し、コードをより適切に制御するためにどのように使用されるかを理解していただければ幸いです。

JavaScriptのクロージャについて理解したので、 Edurekaによる。 Web開発認定トレーニングは、HTML5、CSS3、Twitter Bootstrap 3、jQuery、およびGoogle APIを使用して印象的なウェブサイトを作成し、Amazon Simple Storage Service(S3)にデプロイする方法を学ぶのに役立ちます。

質問がありますか? 「JavaScriptのクロージャ」のコメントセクションにその旨を記載してください。折り返しご連絡いたします。