javascript学習日記の閉鎖

1684 ワード

クローズドはjavascriptの勉強に重点を置いていますが、最初にクローズドに触れるとちょっと難しいです.もちろん、勉強の閉め切りもとても重要な一環です.
  • 語法の作用領域
  • クローズド
  • クローズドプライベート方法のシミュレーション
  • 1.品詞作用域の各関数は、作成時に自分の環境、すなわち語法作用域があります.たとえば:
    function f1 () {
       var a = 1;
       f2();
    }
    function f2 {
        return  a;
    }
    
    上記のコードから、2つの関数f 1とf 2 f 1関数のうち、局所変数aと実行f 2関数をそれぞれ作成します.f 2関数では、aの値を単純に返します.
    f1(); //a  is not defined
    
    f 1とf 2の関数は、自身の作用領域と大域作用領域の内容にのみアクセスできるからである.したがって、f 1関数は、f 2関数の内容、つまりf 1とf 2関数には、共有語法の機能領域が存在しないということになります.
    2.クローズドは他のスコープの内容にどうやってアクセスしますか?このとき、クローズドとは独立(自由)変数にアクセスできる関数(変数は現地で使用されますが、閉鎖された作用領域で定義されています.)の最も一般的な作成クローズドとは、関数の内部でもう一つの関数を作成することです.
    function fn1() {
      var name = "zhanglei";
      function fn2() {
        alert(name);
      }
      return fn2
    }
    var a = fn1();
    a();
    
    3.クローズド・バックシミュレーションプライベート方法JavaScriptは、クローズド・バックシミュレーションのプライベート方法を使用することができる.プライベートメソッドは、コードへのアクセスを制限するのに役立つだけでなく、グローバル名前空間を管理する強力な能力を提供し、非中核的な方法でコードを混乱させないようにするための公共インターフェースの部分です.
    var Counter = (function() {
      var privateCounter = 0;
      function changeBy(val) {
        privateCounter += val;
      }
      return {
        increment: function() {
          changeBy(1);
        },
        decrement: function() {
          changeBy(-1);
        },
        value: function() {
          return privateCounter;
        }
      }   
    })();
    console.log(Counter.value()); /* logs 0 */
    Counter.increment();
    Counter.increment();
    console.log(Counter.value()); /* logs 2 */
    Counter.decrement();
    console.log(Counter.value()); /* logs 1 */
    
    ここでは、大域的な名前空間を利用して、非中核的な方法でコードの公共インターフェース部分を混乱させないようにしています.最初に自己調整関数を作成し、プライベート変数とプライベートメソッドを定義し、3つの共通関数を返しました.この3つの共通関数は同じ環境を共有するための閉込めです.したがって、prvateCounter変数とchangeBy関数にアクセスできます.