まだ閉鎖を理解していますか?Do you understand of closures ?

1247 ワード

閉鎖を理解しますか?
この質問は実際には次のように質問されています.
  • 閉鎖は何ですか?
  • 閉包はどんな役割がありますか?

  • カバンは何ですか
    MDNの解釈:閉包は関数とその関数を宣言する文法環境の組合せである.
    私の理解では、閉パッケージ=『関数』と『関数内でアクセス可能な変数の合計』です.
    簡単な例を挙げます.
    (function() {
        var a = 1;
        function add() {
            var b = 2
    
            var sum = b + a
            console.log(sum); // 3
        }
        add()
    })()
    add関数自体と、その内部にアクセス可能な変数、すなわちa = 1とを組み合わせて閉パケットと呼ぶのは、それだけである.
    クローズドパッケージの役割
    閉包の最大の役割は変数を隠すことであり、閉包の大きな特性は、内部関数が外部関数で宣言されたパラメータと変数に常にアクセスできることであり、外部関数が返された(寿命が終わる)後でも
    この特性に基づいてJavaScriptは,プライベート変数,特権変数,格納変数などを実現できる.
    私有変数の例として,私有変数の実現方法は多く,約束された(変数名に_を加える)ことによって,Proxyエージェントによるものもあれば,Symbolという新しいデータ型によるものもある.
    しかし、本当に広く流行しているのは、実は閉パッケージを使うことです.
    function Person(){
        var name = 'cxk';
        this.getName = function(){
            return name;
        }
        this.setName = function(value){
            name = value;
        }
    }
    
    const cxk = new Person()
    
    console.log(cxk.getName()) //cxk
    cxk.setName('jntm')
    console.log(cxk.getName()) //jntm
    console.log(name) //name is not defined

    関数内のvar name = 'cxk'getNamesetNameの2つの関数のみがアクセスでき、変数をプライベート化することに対して外部はアクセスできません.