클로저란?
클로저란?
정의
반환된 내부함수가 자신이 선언됐을때의 환경인 스코프를 기억하여 자신이 선언되었을때의 환경 밖에서 호출되어도 그 환경에 접근할 수 있는 함수,
외부 함수 호출이 종료되더라도 외부 함수의 지역 변수 및 변수 스코프 객체의 체인 관계를 유지할 수 있는 구조를 클로저라고 한다.
사용 이유
- 현재 상태를 기억하고, 변경된 최신 상태를 유지하기 위해서
- 전역변수의 사용을 억제하기 위해서
- 정보를 은닉하기 위해서
사용 예제
첫 번째 - 중첩 함수
function outerFn() {
let x = 10;
return function innerFn(y) {
// innerFn 함수는 클로저다.
return (x = x + y);
};
}
let a = outerFn(); // 외부함수 호출은 한번만. 이제 a 변수는 innerFn 함수를 참조한다.
a(5); // 15;
a(5); // 20;
a(5); // 25;
두 번째 - 전역에 선언한 변수를 박스 안에서 함수로 정의하고 전역에서 호출
// 클로저를 만드는 형태 2. - 전역에 선언한 변수를 박스 안에서
// 함수로 정의하고 전역에서 호출
let globalFunc;
{
let x = 10;
globalFunc = function (y) {
// globalFunc 함수는 클로저다.
return (x = x + y);
};
}
globalFunc(5); // 15;
globalFunc(5); // 20;
globalFunc(5); // 25;