[TIL] 0620

yoon Y·2022년 6월 21일
0

2022 - TIL

목록 보기
99/109

한 파일에서 어떤 함수가 그 함수만 사용하는 전역변수를 써야할 때 클로저를 사용해서 전역 변수의 접근을 제한할 수 있다는 것을 알게됐다. 면접에서 과제 피드백을 해주셔서 알게되었는데 클로저의 이론만 공부해봤지 실제로 적용한 적은 처음이라 이런 경우에 쓰는 거구나 하고 알게됐다.

적용 전

// debounce.ts
let time: NodeJS.Timeout | null = null;

const debounce = (callback: () => void, delay: number) => {
  if (time) clearTimeout(time);
  time = setTimeout(callback, delay);
};

export default debounce;

적용 후

// debounce.ts
const debounce = (() => {
  let time: NodeJS.Timeout | null = null;

  return (callback: () => void, delay: number) => {
    if (time) clearTimeout(time);
    time = setTimeout(callback, delay);
  };
})();

export default debounce;

관련해서 서치를 해보다가 알게된건데,

function outer() {
  let name = 'kyle';
  if (true) {
    let city = 'seoul';
    return function inner() {
      console.log(city);
     console.log(name);
    };
  }
}

이 경우 inner함수의 상위 스코프는 if스코프이지만 함수 스코프가 아니기 때문에 클로저가 아니라고 한다.
클로저는 내부에 선언된 함수가 외부함수의 지역변수를 사용해 줬을 때만 클로저라고 선언된다.
함수 스코프에만 해당되나보다.

참고 링크

profile
#프론트엔드

0개의 댓글