꾸주니=^= 2024. 11. 26. 13:50

클로저란?

클로저(Closure)는 함수 내부에 정의된 함수(inner function)가 외부 함수(outer function)의 변수 및 스코프에 접근할 수 있는 개념을 말합니다. 외부 함수가 실행을 종료하고, 해당 변수가 더 이상 외부에서 접근할 수 없는 상황에서도 내부 함수는 외부 함수의 변수에 접근할 수 있습니다.

핵심 개념:

  • 외부 함수가 실행을 종료해도 내부 함수는 외부 함수의 스코프를 "기억"합니다.
  • 클로저는 자바스크립트에서 스코프와 실행 컨텍스트의 특징을 활용한 개념입니다.

 

 

위 사진의 코드 동작 자세히 설명

  1. outerFunction('outside') 실행:
    • outerVariable에 'outside'가 할당됩니다.
    • outerFunction은 내부 함수 innerFunction을 반환합니다.
    • 반환된 innerFunction은 외부 함수(outerFunction)의 변수(outerVariable)를 "기억"하고 있습니다.
  2. newFunction('inside') 호출:
    • innerFunction이 실행됩니다.
    • 이때, 내부 함수는 자신이 기억하고 있는 외부 변수 outerVariable과 전달받은 매개변수 innerVariable 모두에 접근합니다.

 

출력 결과

Outer Variable: outside
Inner Variable: inside

 


예제 1: 스코프 이해

설명:

  • functionA 내부에서 b는 지역 변수로 선언되어 함수 외부에서는 접근할 수 없습니다.
  • a는 전역 변수이기 때문에 함수 내부에서도 접근할 수 있습니다.

 

예제 2: 다른 함수에서 지역 변수 접근 시도

설명:

  • functionB는 functionA 내부에 선언되지 않았으므로 b에 접근할 수 없습니다.
  • 스코프 체인 상, b는 functionA 내부에서만 존재합니다.

 


 


요약

  • 클로저는 함수가 종료된 후에도 외부 함수의 스코프를 기억하고 접근할 수 있는 강력한 도구입니다.
  • 이를 통해 데이터 은닉, 상태 유지, 동적 함수 생성 등 다양한 기능을 구현할 수 있습니다.