장점
- 데이터 보존 할 수 있다,
- 외부 함수의 실행이 끝나더라도 외부 함수 내 변수를 사용 가능 이처럼 특정 데이터를 스코프 안에 가두어 둔 채로 계속 사용 할 수 있게하는 폐쇄성을 갖는다
- 정보의 접근 제한(캡슐화)
- 클로저 모듈 패턴을 사용해 객체에 담아 여러 개의 함수를 리턴하도록 만는다
- 모듈화에 유리하다
- 각각의 변수에 할당하면 각자 독립적으로 값을 사용하고 보존 가능
// 클로저를 만드는 형태 1. - 중첩함수
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;