모던자바스크립트 24장 클로저

연호·2022년 12월 31일
0

모던자바스크립트

목록 보기
19/28

클로저

  1. 클로저의 공식적인 정의는 함수와 그 함수가 선언된 렉시컬 환경과의 조합이다. 다만, 일반적으로 외부 함수보다 중첩함수가 더 오래되는 경우 중첩 함수는 이미 생명 주기가 종료된 외부 함수를 참조할 수 있고 이러한 중첩함수를 클로저라 부른다. 함수의 실행 컨텍스트에서 제거됬다고, 렉시컬 환경까지 소멸하는 것은 아니다.
function foo (){
  const x = 1;
  
  // bar 함수는 정의상 클로저가 맞지만, 곧바로 소멸한다.
  // 이러한 함수는 일반적으로 클로저라 하지 않는다.
  function bar (){
    console.log(x);
  }
  bar();
}
foo();
function foo () {
  const x = 1;
  const y = 2;
  
  // 중첩함수 bar 는 외부 함수 foo 보다 더 오래 유지되며 상위 스코프를 참조한다.
  // 이런 경우 클로저라 부른다.
  // 여기서 클로저에 의해 참조되는 상위 스코프의 변수 (x)를 자유 변수라고 부른다.
  function bar() {
    console.log(x);
  }
  return bar;
}
const bar = foo();
bar();
  1. 클로저는 상태가 의도치 않게 변경되지 않도록 안전하게 은닉하고, 특정 함수에게만 상태 변경을 허용하여 상태를 안전하게 변경하고 유지하기 위해 사용한다.
const increase = (function(){
  let num = 0;
  
  // 클로저
  return function() {
    return ++num;
  };
}()};

console.log(increase()); // 1
console.log(increase()); // 2
console.log(increase()); // 3
profile
뉴비

0개의 댓글