閉包とは何ですか?クローズドの役割は何ですか?

1591 ワード

原文のリンク:https://github.com/YvetteLau/Blog/issues/35
パッケージの定義
「JavaScript高級プログラム設計」:
クローズドとは、別の関数のスコープにアクセスする権限を持つ変数の関数です.
「JavaScript権威ガイド」:
技術的な観点から言えば、すべてのJavaScript関数はクローズドされています.それらは対象です.それらはスコープチェーンに関連しています.
『あなたの知らないJavaScript』
関数が覚えていて、ある語法のスコープにアクセスできると、関数が現在の語法のスコープ外で実行されても、クローズドが発生します.
閉じたパッケージを作成します
function foo() {
    var a = 2;
    return function fn() {
        console.log(a);
    }
}
let func = foo();
func(); //  2
クローズドは、関数が定義された時の動作領域にアクセスできるようにします.Fnのおかげで、foo()実行後、foo内部作用域は破壊されない.
閉包の役割
1.関数定義時に存在する語法のスコープにアクセスできる(回収を阻止する).
2.プライベート変数
function base() {
    let x = 10; //    
    return {
        getX: function() {
            return x;
        }
    }
}
let obj = base();
console.log(obj.getX()); //10
3.アナログブロックレベルのスコープ
var a = [];
for (var i = 0; i < 10; i++) {
    a[i] = (function(j){
        return function () {
            console.log(j);
        }
    })(i);
}
a[6](); // 6
4. モジュールを作成
function coolModule() {
    let name = 'Yvette';
    let age = 20;
    function sayName() {
        console.log(name);
    }
    function sayAge() {
        console.log(age);
    }
    return {
        sayName,
        sayAge
    }
}
let info = coolModule();
info.sayName(); //'Yvette'
モジュールモードは二つの必須条件を備えています.
  • は、少なくとも一回(呼び出しごとに新しいモジュールのインスタンスを作成する)呼び出されなければならない外部の閉鎖関数が必要である.
  • クローズド関数は、少なくとも1つの内部関数を返さなければなりません.このようにして、内部関数は、プライベート・スコープ内でクローズド・パケットを形成し、プライベートの状態にアクセスまたは変更することができます.
  •