blog-imgDucklog

클로저란?

클로저란?

정의

반환된 내부함수가 자신이 선언됐을때의 환경인 스코프를 기억하여 자신이 선언되었을때의 환경 밖에서 호출되어도 그 환경에 접근할 수 있는 함수,


외부 함수 호출이 종료되더라도 외부 함수의 지역 변수 및 변수 스코프 객체의 체인 관계를 유지할 수 있는 구조를 클로저라고 한다.

사용 이유

  • 현재 상태를 기억하고, 변경된 최신 상태를 유지하기 위해서
  • 전역변수의 사용을 억제하기 위해서
  • 정보를 은닉하기 위해서

사용 예제

첫 번째 - 중첩 함수


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;