クローズドパッケージの定義と使用について詳しく説明します!

8010 ワード

閉鎖とは何ですか.および定義と使用
多くのフロントエンド開発者は、バッグを閉じることに慣れていないのではないでしょうか.面接でよく聞かれる質問の一つでもあります.まず、閉パケットに対する公式の解釈を見てみましょう.多くの変数とこれらの変数をバインドした環境の式の一部です.やれやれ~ちょっと抽象的な話のようです.javascript言語は、外部関数で内部関数を定義できるようにするため、開発経験を組み合わせた個人的な理解です.簡単に言えば、閉パッケージ:つまり、1つの関数を別の関数体内で定義することができます.そしてこの内部関数は外部関数で定義された局所変数にアクセスできる.もっと簡単なのは、1つの関数に1つの関数を入れることです.(閉パッケージは1つの関数の内部に定義された関数です)この内部関数が外部関数を含む外で呼び出されると、閉パッケージが形成されます.次に、閉パッケージの書き方を見てみましょう.まず、この書き方はオブジェクトに関数が定義されているように見えますが、javascriptでは万物がオブジェクトであり、実は関数もオブジェクトの1つです.
    var obj1 = {
     
      hello:1,
      btn1:function(w1){
     
        //   this   obj1   (   :                               ~        this     )
        console.log("  1:",this.hello+w1 );
        return this.hello+1 ;
      }
    }
    obj1.btn1(1);
     //  1: 2

この書き方は上とあまり違いがないようですが、new個のオブジェクトに属性と方法を追加しています.
    var obj2  = new Object();
    obj2.hello = 1;
    obj2.btn2 = function(w2){
     
      console.log("  2:",this.hello+w2)
      return this.hello+w2
    }
    obj2.btn2(2)
    //  2: 3

これは直感的で、関数の中に関数が入っています.
   function btn3(){
     
     var w3 = 10
     function btn4(){
     
       console.log("  3:",w3)  //10
   }

閉包は外部関数に内部関数を定義し、内部関数は外部関数の局所変数を得ることができると理解されています.では、外部関数を調整して内部関数の変数をどうするか(btn 3関数にbtn 4関数が含まれている場合、btn 3関数に定義されているすべての局所変数、btn 4関数を直接使うことができる場合、btn 4はbtn 3の変数を手に入れることができず、どのように解決するかは以下の例を参照)
    function btn3 (){
     
    var w3=10
    function btn4(){
     
      var b=4
      // var b=b+w3
      console.log("  3:",b) //14
     }
    return btn4
   }
   var a = btn3()
   a()

btn 3関数をbtn 4の戻り値として投げ出す.あるいは、匿名の関数を返して自分で実行してもいいです.閉包と役割ドメインは離れられないと思います.閉包を理解するにはまず役割ドメインを理解しなければなりません.役割ドメインは、局所的な役割ドメイン、グローバルな役割ドメイン、チェーン的な役割ドメインに分けられ、役割ドメインを話す機会があります.
   function btn3 (){
     
     var w3=10
     return function (){
     
       console.log("  3:",w3) 
     }
   }
  btn3()()

要するに、私の理解する閉包は簡単に言えば関数の中で1つの関数を定義して、外部の関数の中で1つの内部の関数を定義して、閉包は内外の関数で1つの連結をして、内外の関数の局部の変数を手に入れることができます.違う理解と良いアドバイスがあれば.一緒に分かち合い、一緒に進歩することができます.