Closure
1986 ワード
A closure is the combination of a function bundled together(enclosed) with references to its surrounding state (the lexical environment).
MDNの定義
内部関数+語彙環境の組合せ
コンテキストAで宣言された変数を内部関数Bで参照する場合に発生する特殊な状況
コンテキストAで宣言された変数aの内部関数Bを参照する.
Aの外部に渡せば、Aが終わってもAは消えない.
=>関数が終了しても消えない領域変数を作成できます.は、関数の終了後も変わらない パッケージ内部変数保護
MDNの定義
内部関数+語彙環境の組合せ
コンテキストAで宣言された変数を内部関数Bで参照する場合に発生する特殊な状況
var outer = function() {
var a = 1;
var inner = function(){
console.log(++a);
}
inner();
}
outer();
var outer = function(){
var a = 1;
var inner = function(){
return ++a;
}
return inner;
}
var outer2 = outer();
console.log(outer2());
console.log(outer2());
コンテキストAで宣言された変数aの内部関数Bを参照する.
Aの外部に渡せば、Aが終わってもAは消えない.
=>関数が終了しても消えない領域変数を作成できます.
function user (_name){
var _logged = true;
return {
get name() { return _name;}
set name(v) { _name = v;}
login() {_logged = true;}
logout() {_looged = false;}
get status(){
return _logged ? 'login' : 'logout';
}
}
}
var roy = user('yoonji');
console.log(roy.name); //yoonji; getter 호출
roy.name = 'jinyoung'; //setter 호출
console.log(roy.name);//jinyoung
roy._name = 'yooji';
console.log(roy.name);//jinyoung
roy.logout();
console.log(roy.status);// logout
roy.status = true; //setter가 없어서 무시.
console.log(roy.status);//logout
変数Reference
この問題について(Closure), 我々は、より多くの情報をここで見つけました https://velog.io/@dev-katrina/Closureテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol