[JS] 클로저

2024. 4. 25. 21:09·프로그래밍 언어/JavaScript

클로저란?

 

다른 함수 내부에 정의된 함수가 있는 경우 외부 함수가 실행을 완료하고, 해당 변수가 해당 함수 외부에서 더 이상 액세스할 수 없는 경우에도 해당 내부 함수는 외부 함수의 변수 및 범위에 액세스 할 수 있는 것.

 

 

 

 

function outerFunction(outerVariable){
  return function innerFunction(innerVariable){
    console.log('Outer Variable: ' + outerVariable);
    console.log('Inner Variable: ' + innerVariable);
  }
}

const newFunction = outerFunction('outside');
newFunction('inside');

위의 코드에서 outerFunction을 호출하면서 ‘outside’를 인수로 넣어주면,  innerFunction(innerVariable) 함수가 반환되고 newFunction 변수에 저장된다.

 

그리고 newFunction을 실행과 동시에 ‘inside’를 인수로 넣어주면 console.log가 실행된다.

 

 

 

 

이상한 점은 바로 console.log('Outer Variable: ' + outerVariable); 가 오류 없이 출력된다는 것이다. 

 

outerVariable은 outerFunction의 매개변수이다.

 

하지만 innerFunction(innerVariable) 함수를 반환함과 동시에 outerFunction 함수는 끝났다. 그럼에도 불구하고 outerFunction의 매개변수인 outerVariable이 오류 없이 출력된다. 이것이 바로 클로저 덕분이다.

 

 

 

 

내부에서 접근할 수 있는 Local 변수로 innnerVariable, 클로저로 접근할 수 있는 변수로 outerVariable이 있는 것을 확인할 수 있다.

 

 

 

 

예시

let a = 'a';

function functionB() {
  let c = 'c';
  console.log(a, b, c);
}

function functionA() {
  let b = 'b';
  console.log(a, b);
  functionB();
}

functionA();

위의 코드를 출력해 보면  console.log(a, b, c);  부분에서 변수 b의 값을 참조할 수 없기 때문에 오류가 나온다.

 

 

 

 

- 클로저를 이용해 해결

let a = 'a';

function functionA() {
  function functionB() {
    let c = 'c';
    console.log(a, b, c);
  }
  let b = 'b';
  console.log(a, b);
  functionB();
}

functionA();

이때 다음과 같이 functionB를 functionA의 내부로 넣고 실행시켜 준다. 그리고 확인해 보면

 

 

 

 

클로저로 변수 b가 나오며, 오류 없이 출력되는 것을 확인할 수 있다.

 

 

 

 

정리

 

클로저란 생명주기가 끝난 외부 함수의 변수에 접근할 수 있는 내부 함수를 의미

'프로그래밍 언어 > JavaScript' 카테고리의 다른 글

[JS] 함수 선언식과 표현식, 즉시 실행 함수(IIFE)  (0) 2024.04.26
[JS] 얕은 비교, 깊은 비교 / 얕은 복사, 깊은 복사  (0) 2024.04.26
[JS] 이벤트 루프  (0) 2024.04.25
[JS] call, apply, bind 메서드  (0) 2024.04.25
[JS] this 키워드  (0) 2024.04.25
'프로그래밍 언어/JavaScript' 카테고리의 다른 글
  • [JS] 함수 선언식과 표현식, 즉시 실행 함수(IIFE)
  • [JS] 얕은 비교, 깊은 비교 / 얕은 복사, 깊은 복사
  • [JS] 이벤트 루프
  • [JS] call, apply, bind 메서드
tteokbokki-master
tteokbokki-master
공부하며 알아가는 걸 조금씩 정리하고 있어요
  • tteokbokki-master
    용로그
    tteokbokki-master
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 프로그래밍 언어
        • HTML & CSS
        • JavaScript
        • React 기초
        • 파이썬 기초
        • TanStack-Query
        • C언어 기초
        • git
        • 리눅스
        • 코딩테스트 공부
      • 개발 지식
      • 언어학
        • 의미론
      • 회고 및 기록
      • 프로젝트
        • TodoList 만들기
        • 학수고대 프로젝트
      • 기타
        • [JS-0기] 한입 FE 챌린지
        • 서평
  • 인기 글

  • 글쓰기 / 관리
  • hELLO· Designed By정상우.v4.10.3
tteokbokki-master
[JS] 클로저
상단으로

티스토리툴바