클로저

윤영훈·2021년 8월 23일
0

개념

한 중첩함수가 외부함수의 식별자를 참조하고 있고, 중첩함수가 외부함수보다 더 오래 살아 있는 경우,(생명 주기가 더 긴 경우) 중첩 함수는 이미 생명주기가 종료된 외부함수의 식별자를 참조 할 수 있다. 이러한 중첩 함수를 클로저라 부른다.

이러한 클로저는 본인의 상위 스코프에서 현재 참조하고 있는 식별자만을 기억하는데, 클로저에 의해 참조된 변수를 자유변수라고 한다.

클로저의 활용

클로저는 상태를 안전하게 변경하고 유지하기 위해 사용합니다.
다시 말해, 상태가 의도치 않게 변경되지 않도록 상태를 안전하게 은닉하고 특정 함수에게만 상태변경을 허용하기 위해 사용한다.

예시

함수가 호출될 때마다 호출된 횟수를 누적하여 출력하는 카운터

let num = 0;
const increase = function () {
  return ++num;
};

console.log(increase());
console.log(increase());
console.log(increase());

위 코드는 잘 동작하지만, 카운트 상태가 전역변수를 통해 관리되기 때문에 언제든지 누구나 접근할 수 있고 변경할 수 있습니다. 이는 의도치 않게 상태가 변경될 수 있다는 것을 의미합니다.

클로저 사용 예시

let num = 0;
const increase = (function () {
  let num = 0;
  return function () {
    return ++num;
  };
})();

console.log(increase());
console.log(increase());
console.log(increase());

위 코드가 실행되면 즉시 실행 함수가 호출되고 즉시 실행 함수가 반환한 함수가 increase 변수에 할당됩니다. increase 변수에 할당된 함수는 자신이 정의된 위치에 의해 결정된 상위 스코프인 즉시 실행 함수의 렉시컬 환경을 기억하는 클로저입니다.

0개의 댓글