キャビネット(closure)
キャビネット(closure)
Closerとは?
1.関数と宣言された関数の語彙環境の組み合わせ
2.戻り関数
3.外部関数変数にアクセスできる内部関数
->
関数のコールバック関数として,外部関数の変数にアクセスできる内部関数をcloserと呼ぶ.
Closerの特徴について
戻り関数
この関数を少し違うように実装してみましょう.
最初のコードとは異なり、上のコード
関数の
호출(invacation)
が2回発生します.説明:
const add = (a) => (b) => a + b;
add(5)(10) // --> 15
add(5) // --> (b) => a + b; 형태의 함수// 그럼 add(5)를 호출함으로써 매개변수 a에 들어간 5는 어디로 갔나? -> 메모리상에 저장되어있다. 즉 add(5)는 메모리상에 매개변수 a에 5를 저장해둔 (b) => a + b; 라는 함수! 이다.
typeof add(5) // --> 'function'
typeof add(5)(10) // --> 'number'
前に述べたようにadd(5)は関数です.
aに5の(b)=>a+bを指定します.因関数です.
メモリに格納されているため、aという変数をグローバルに出力しようとしてもエラーが発生します.
->
上記では、矢印関数によって記述された
함수 표현식(익명함수)
を表すために、function
キーワードが使用される.클로저 함수
は上と同じ함수를 리턴하는 함수
なので、そのような形態を持っています.次のコードは上の形式のように
함수를 리턴하는 함수
ですが、モジュールの関数ではありません.外部関数変数にアクセス可能な内部関数
モジュールの核心は、スキャンを利用して変数のアクセス範囲(closure;closure)を閉じることである.
したがって,宣言変数の位置は戻り関数の位置と同様に重要である.
上記のコードから,変数aとbが宣言する箇所はそれぞれ異なる.
a宣言された関数は外にあり、
외부 함수
と呼ばれ、aは외부함수의 변수
と呼ばれている.b宣言の関数は
외부함수
の中にあり、내부 함수
と呼ばれ、bは내부함수의 변수
と呼ばれています.このように,Closer関数の走査線は分離されている.
上記のモジュール関数に基づいてスキャンルールを追加
->
外部関数は変数bにアクセスできません
内部関数は変数aにアクセスできます
エンクロージャの使用方法について
エンクロージャの使用方法について説明します.
一般関数は、関数の実行が終了した後、関数内部の変数を使用できません.
ただし、モジュールは、外部関数の実行が完了しても、外部関数の変数をメモリに格納します.
(語彙環境をメモリに格納するため、起こり得ること)
コードで理解しよう
上のコードに示すように.
変数
addTen
は、エンクロージャを介して返される関数を含む.addTe
nは、add함수
から변수 a
に因子として伝達される10という値であり、a = 10
のように含まれ続けている.外部関数がすでに実行されていても!
(データ保持関数)
const add = function (a) {
return function (b) {
return a + b;
};
};
const addTen = add(10);
console.log(addTen);
// --> f (b) {return a + b;}
// addTen은 f (b) {return a + b;} 함수이면서 동시에 메모리상에 a변수에 10을 가지고 있는 녀석이다! 라고 생각하면 된다.
したがって、addTen(10)の場合、-->15が表示されます.これはメモリに格納されており、外部からaにアクセスしようとするとエラーが発生します.
関数の再利用(モジュール化)、使用例
これにより、エンクロージャは特定のデータをスキャナに保存して使用を継続することができます.
上のコードを再使用します.
makeCount()関数を持つ2つの変数を宣言します.
const count1 = makeCount();
const count2 = makeCount();
これらは同じ関数を持つが、makeCount()を実行するときに宣言されるlet a=0である.の値はそれぞれ独立しています.したがって、count 1およびcount 2のaは互いに独立し、それぞれの値を保持することができる.
このように、関数の再利用性を最大限に高め、1つの関数を完全に独立した形式に分離することを
모듈화
と呼ぶ.Reference
この問題について(キャビネット(closure)), 我々は、より多くの情報をここで見つけました https://velog.io/@hyo123/클로저closureテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol