javascript-関数のステップ(クローズド)

3083 ワード

関数宣言と関数式(匿名関数)
関数宣言
関数名を持つ関数宣言には、以下のような形式があります.
function    () {
     
    //code
}
jsはコードを初めて処理する時、コードを全部スキャンして関数宣言のみを検索します.関数宣言後の関数宣言を検索して関数名を定義し、関数の参照を関数名に伝えます.
コードをスキャンして、コードを順番に実行し、宣言済み関数を使用すると、関数名が関数の参照を呼び出します.
関数式
関数名がない、すなわち匿名関数です.呼び出しを容易にするために、関数式である変数(変数格納関数参照)に渡すことがあります.この匿名関数を直接に実際参照として他の関数に渡す場合がある.次のようなフォーマット
var a = function () {
     
    //code
}
匿名関数では、コードを第2のスキャンで順次実行する場合にのみ実行されます.最初のスキャン関数宣言では呼び出しません.
一等値
ここでは、jsの中の一等値概念を追加的に紹介します.jsでは次の3つの機能を実現できるものを1等値と呼びます.
  • は、変数や配列、オブジェクトなどのデータ構造にコピーします.
  • は、関数に伝達する.
  • は、関数から返します.
  • 関数も上記のような全部の機能を持っていますので、関数も一等値です.
    注意:
  • は、関数を関数に伝達し、関数名を実参とするだけでよい.匿名関数であれば、関数を変数にコピーして転送したり、直接に匿名関数を参照先に置いたりできます.
  • は、関数を返すことができます.すなわち、一般的には関数内で別の関数を宣言して、この宣言の関数名を返したり、直接に匿名関数を返したりします.
  • 関数ネスト
    関数ネストについては,手紙の役割領域に注意しなければならないので,この点についてはクローズドで詳細に紹介する.
    包みを閉じる
    概念:関数と参照環境のことです.
    何が参照環境ですか?例えば、関数が定義されている時、宣言されたすべての変数と参照されているすべての変数の値はこの関数と一緒に結合されています.環境と呼ばれています.つまり、私たちがこの関数を呼び出すと、関数内の変数が定義されているときの値が一緒に呼び出されます.
    関数が呼び出された時と戻る時には、コールとリターンだけではなく、関数を定義する時に、関数に含まれる他の内容を環境と一緒に呼び出して返します.
    いくつかの名詞を紹介します.
    1.スコープ
    作用域は全体と部分に分かれることを知っています.コードトップに位置する関数のスコープは大域的であり、関数で定義される関数は局所的である.
    関数の内部では、関数宣言を使用して関数を定義します.関数の内部ではどこでも定義されています.関数式を使って関数を定義すると、関数式が実行された後にのみ定義されます.
    2.語法のスコープ
    語法はコード構造を確認するだけで変数の作用領域を確定できるという意味で、コード実行が必要な場合ではないと分かります.変数は常に一番近い関数のスコープ内で値を検索します.関数内部参照関数の変数でも、最近のスコープ内で検索されます.語法のスコープで重要なのは関数がいつ定義されているかで、いつ引用されたのかではなく、定義された時に構造が明確になっています.jsは彼を定義する環境で実行されるからです.
    3.自由変数
    ローカルスコープ内で定義されていない変数.関数の内部では、割り当て(すなわち、ローカルで定義されていない変数)を直接に宣言せずに呼び出した変数を自由変数と呼びます.ローカルに定義された変数とすべてのモダリティを局所変数と呼びます.
    4.決定する
    関数を決めることができる環境とは、すべての自由変数に値を提供する環境をいう.
    上記の内容を紹介してから、私達は再びクローズドの概念を説明できます.
    クローズド:自由変数を含む関数は、すべての自由変数に変数バインディングを提供する環境とともに、クローズドと呼ばれています.
    注意:
  • クローズドは、環境のレプリカではなく、実際の環境を含む.関数内部の自由変数が現れると、変数は変数によって変更され、自由変数は変わります.
  • 例:
    var secret = "007";
    
    function getSecret() {
         
        var secret = "008"; 
        function getValue(){
         
            return secret;
        }   
        return getValue;
    }
    
    var getValueFun = getSecret();
    getValueFun();
    結果:008
    return getValue私たちはクローズドを作成しました.getValueの中のsecretは自由変数です.彼の環境はget Secretの内部です.だから、008です.