閉じる(日付18)


「Closerを勉強している間に脳がCloserになった」
この文章は私のCloserに対する理解を説明した.私の理解の仕方が他の人に役に立つことを望んでいます.つまり、私のロッカーに対する理解がすべて間違っていなくても、一部が間違っている可能性があります.したがって、これらのモジュールを理解している場合は、mdnドキュメントに記載されているモジュールのような説得力のある資料を基に、以下の内容を参照してください.感謝に堪えません.
前の記事では、HTMLのラベルを重ねることでファミリースペクトルを形成できると述べていました.したがって、タグ間の関係は、親、子、兄弟、子孫として理解されます.
JavaScriptの関数もこのようにネストできます.ある関数は、その内部に別の関数を含めて内部関数を返すことができます.例をあげましょう
01 function titleOfBooks(title) {
02   return function () {
03     return title;
04   }
05 }
06
07 const code = titleOfBooks("codes");
08 typeof code;    // "function"
09 code();          // "codes"
titleOfBooks関数には、その戻り値として別の関数が含まれます.「code」を伝達パラメータとしてtitleOfBooks関数に入れ、codeという変数に結果を割り当てると、内部関数の戻り値が保存されるため、codeのタイプが関数になります.
すなわち,titleOfBooks関数は外部関数であり,titleを返す2行目の関数は内部関数である.この場合、内部関数と内部関数は、使用可能な範囲に達するモジュールとして理解できます.
まず一般関数を見てみましょう.
01 function test() {
02   let x = 0;
03   return x;
04 }
05
06 console.log(x);   // ReferrenceError: x is not defined
上記の例では、test関数は変数xを宣言し、0を指定してxを返します.関数の外の6行目のようにx値をチェックするとどうなりますか?コメントに書いてあるように、レポートを発表させていただきます.関数で宣言されるxは領域変数であるためです.xは関数の実行時に作成され、関数の終了に伴って消えます.
これが私たちが一般的に理解している変数の使用です.HTML形式では、子(内部)は親(外部)変数を利用できますが、親(外部)は子(内部)変数を利用できません.
さっきのネスト関数に戻りましょう.
01 function titleOfBooks(title) {
02   return function () {
03     return title;
04   }
05 }
06
07 const code = titleOfBooks("codes");
08 console.log(typeof(code));    // "function"
09 code();          // "codes"
変数の使用について説明したように、内部関数は外部関数の範囲内の変数を使用することができます.最初の行のtitleはtitleOfBooksのパラメータであるため、内部関数は使用できます.
しかし、何かおかしいと思いませんか.外部関数は7行目で終了していることは明らかです.あれからtitleに近づけないのが普通です.ただし、9行目ではcode()が7行目に入力した伝達パラメータ「codes」を出力している.
これは、Closer関数が自分と自分で使用できる変数を「閉じる」ためです.最近馴染みのある概念「自己隔離」ともいえる.Closer関数は、外部関数宣言から使用する変数まで、自分と自分の使用可能な範囲内の変数を閉じ、外部関数が終了しても自分の使用可能な領域を設定します.
したがって、関数が終了した後に消えるべき変数を元のように使用し続けることができます.複数の変数を宣言し、外部関数に異なる伝達因子を割り当てた場合、モジュール関数の動作は、実際には知らないが、独立した領域ごとに同じです.
ただし、オブジェクトが外部関数で1つの関数ではなく、オブジェクトで複数の関数を値として定義している場合は、Closer関数として使用されます.外部関数が変数に割り当てられている場合は、メソッドを使用してモジュール関数を格納できます.
生活コードについては、Closerの講義をリンクに残してください.複数の変数を宣言して割り当て、オブジェクトを割り当てるモジュール関数をモジュール(3/4)で表示できます.