jsの閉包原理を理解する

黄舟
黄舟オリジナル
2017-02-27 14:41:371352ブラウズ

質問? js(JavaScript)のクロージャ原理とその機能とは何ですか?

1. 定義

公式の説明: クロージャは、多くの変数とこれらの変数にバインドされた環境を持つ式 (通常は関数) であり、したがって、これらの変数も式の一部です。


明らかに、うーん。 。 。 。 。何!田舎の人にはドア破壊なんて理解できない! ! !

つまり、編集者の理解は次のとおりです: **** は関数内で定義された関数であり、外部からアクセスできます。 (通常の状況では、ローカル機能にアクセスできません)これは、ズボンを脱いでオナラをするようなものですが、不要ではありません。クロージャーには確かに役割があります。


機能: 1. グローバル変数のオブジェクトを削減し、これまでグローバル変数が大きくなりすぎて保守が困難になっていたのを防ぐことができます

2. 変更可能な変数を防止します内部変数はアクセス可能な外部では変更できず、変更できないためです。 Safe

3. 関数内の変数を読み取る もう 1 つは、これらの変数の値をメモリに保持することです。

2. 例: (js コード)

1. Javascript 言語の特別な点は、グローバル変数を関数内で直接読み取ることができることです。

var n=999;
  function f1(){
    alert(n);
  }
  f1(); // 999

2. 一方、関数内のローカル変数は関数の外から読み取ることはできません。


 function f1(){
    var n=999;
  }
  alert(n); // error

ここで注意すべき点があります。関数内で変数を宣言する場合は、var コマンドを使用する必要があります。これを使用しない場合、実際にはグローバル変数を宣言していることになります。

  function f1(){
    n=999;
  }
  f1();
  alert(n); // 999



*****ローカル変数を外部から読み取るには?


関数内でローカル変数を取得する必要がある場合があります。ただし、前述したように、これは通常の状況では不可能であり、回避策によってのみ実現できます。



function f1(){
    n=999;
    function f2(){
      alert(n); // 999
    }
  }


3. クロージャを使用する際の注意点

1) クロージャは関数内の変数をメモリに格納するため、メモリの消費量が非常に多くなります。そのため、クロージャを悪用することはできません。悪用すると、Web ページでパフォーマンスの問題が発生したり、IE でメモリ リークが発生したりする可能性があります。解決策は、関数を終了する前に、未使用のローカル変数をすべて削除することです。

2) クロージャは、親関数内の変数の値を親関数の外で変更します。したがって、親関数をオブジェクトとして使用し、クロージャをそのパブリック メソッドとして使用し、内部変数をプライベート値として使用する場合は、親関数内の変数の値を自由に変更しないように注意する必要があります。


上記は、js の閉包原理の理解です。さらに関連するコンテンツについては、PHP 中国語 Web サイト (www.php.cn) に注目してください。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。