-
클로저 (Closure)Javascript 2020. 4. 2. 16:49
Closure
Closures are nothing but FUNCTIONS WITH PRESERVED DATA
내부함수가 외부함수의 컨텍스트에 접근할 수 있는 것을 클로저라고 합니다.
외부함수가 실행된 후에도 내부함수가 외부함수의 컨텍스트에 접근할 수 있습니다.커링: 함수 하나가 n개의 인자를 받는 대신, n개의 함수를 만들어 각각 인자를 받게 하는 방법
function adder(x) { return function(y) { return x + y; } } adder(2)(3); //5 //하나의 값을 고정시키고 계속 사용할 수 있습니다. let add100 = adder(100); add100(2); //102 add100(10); //110 let add5 = adder(5); add5(2); //7
외부 함수의 변수가 저장되어 마치 템플릿 함수와 같이 사용 가능합니다.
function htmlMaker(tag) { let starTag = '<' + tag + '>'; let endTag = '</' + tag + '>'; return function(content) { return startTag + content + endTag; } } let divMaket = htmlMaker('div'); divMaker('code'); // <div>code</div> divMaker('states'); // <div>states</div> let h1Maker = htmlMaker('h1'); h1Maker('Headline'); // <h1>Headline</h1>
클로저 모듈 패턴
변수를 스코프 안쪽에 가두어 함수 밖으로 노출시키지 않는 방법
function makeCounter() { let privateCounter = 0; let obj = { increment: function() { //객체에 대한 키값이 함수 privateCounter++; }, decrement: function() { privateCounter--; }, getValue: function() { return privateCounter; } }; return obj; //함수 모음을 리턴 } let counter1 = makeCounter(); counter1.increment(); counter1.increment(); counter1.getValue(); //2 let counter2 = makeCounter(); counter2 = increment(); counter2 = decrement(); counter2.getValue(); //1 //함수 내에서 privateCounter를 각각 독립적으로 가지고있기 때문에 서로 영향을 받지 않습니다.
프라이빗 변수를 만드는 이유
소프트웨어가 커지게 된다면 많은 데이터가 소프트웨어 안에 존재하는데 누구나 수정할 수 있다는 의미는 그 소프트웨어가 망가질 수 있다는 의미이다.
'Javascript' 카테고리의 다른 글
(loading)this (0) 2020.04.15 미정의 매개변수를 배열로 받는 나머지 매개변수 (Rest parameter) (0) 2020.04.12 데이터 타입 (data type) (0) 2020.04.02 재귀함수 (0) 2020.03.30 정수 메서드 (interger method) (0) 2020.03.30