728x90
반응형
MDB - 클로저
https://developer.mozilla.org/ko/docs/Web/JavaScript/Guide/Closures
클로저
클로저는 함수와 함수가 선언된 어휘적 환경의 조합이다. 클로저를 이해하려면 자바스크립트가 어떻게 변수의 유효범위를 지정하는지(Lexical scoping)를 먼저 이해해야 한다.
developer.mozilla.org
예시1
//함수 리턴 예시
function outerFn(){
let outerVar = 'outer';
console.log(outerVar);
function innerFn(){
let innerVar = 'inner';
console.log(innerVar);
}
return innerFn;
}
outerFn();
//위 의 경우 outerVar만 출력,
//innerFn()의 경우 실행되지 않으며 innerFn()이 반환된다!!!!
그렇다면
- outerFn()();
- let innerFn = outerFn();
- innerFn();
은 어떤 결과일까?
1. outerFn과 innerFn이 모두 실행된다. console.이 2번 출력
2. innerFn 변수에 innerFn()이 할당되고, outerVar 이 출력된다.
3. innerFn이 실행됨!
여기에서 innerFn()를 클로저 함수 라고 한다.
※ 클로저 함수 안에서는 지역변수와 외부함수의 변수, 전역변수의 접근이 전부 가능하다.
클로저 예제
1. 커링 - 함수 하나가 n개의 인자를 받는 대신, n개의 함수를 만들어 각각 인자를 받게 하는 방법
function htemlMaker(tag){
let startTag = '<' + tag + '>';
let endTag = '</' + tag + '>';
return function(content){
return startTag + content + endTag;
}
}
let divMaker = htmlMaker('div');
divMaker('code'); // <div>code</dic>
divMaker('states'); // <div>states</div>
let h1Maker = htmlMaker('h1');
h1Maker('Headline'); //<h1>Headline</h1>
2. 클로저 모듈 패턴 : 변수를 스코프 안쪽에 가두어 함수 밖으로 노출시키지 않는 방법
function makeCounter(){
let privateCounter = 0;
return {
increment : funciton(){
privateCounter++;
},
decrement : function(){
privateCounter--;
},
getValue: function(){
return privateCounter;
}
}
}
/***********************************************/
let counter 1 = makerCounter();
counter1.increment();
counter1.increment();
counter1.getValue();
let counter2 = makeCounter();
counter2.increment();
counter2.increment();
counter2.getValue();
반응형
'창고(2021년 이전)' 카테고리의 다른 글
[JS] DOM(Document Object Model) (0) | 2019.10.03 |
---|---|
[JS] 매개변수 길이가 유동적일때 (0) | 2019.10.01 |
Test 기반 개발방법 (0) | 2019.10.01 |
[Git] Command Line (0) | 2019.09.30 |
[JS] array Method(forEach, map, filter,reduce) (0) | 2019.09.29 |