클로저

Sheryl Yun·2021년 12월 22일
0

Javascript 정복

목록 보기
1/9
post-thumbnail

개념

클로저란, 내부함수가 외부함수의 지역변수에 접근할 수 있는 특성이다.

자바스크립트에는 가비지 컬렉터 기능이 있다.

가비지 컬렉터란 쓸모 없어진 객체가 차지하는 메모리를 자동으로 해제하는 것을 의미한다.
이 과정에서 자바스크립트의 클로저 개념이 사용된다.
즉, 외부함수가 종료되어 소멸하더라도 내부함수에서 참조하고 있는 변수가 자바스크립트 가비지 컬렉터의 대상이 되지 않는다.

예시 코드

function outer(){
    var title = 'everybody';

    function inner(){
        alert(title);
    }

    inner();
}

outer();

내부함수 inner는 외부함수 outer의 지역변수 title에 접근할 수 있다.

outer 함수가 실행된 이후 outer 함수는 소멸하지만, 자바스크립트의 클로저라는 특성 덕분에
outer 함수 내부의 inner 함수는 여전히 outer 함수의 지역변수인 title을 참조할 수 있다.

따라서 outer 함수를 실행하면 실행결과로 'everybody'가 alert로 잘 출력되는 것을 볼 수 있다.

추가 설명

함수가 실행되면 기본적으로 함수는 소멸한다.

하지만 내부함수가 참조하는 외부함수의 지역변수는

외부함수가 실행이 되어도(= 소멸되어도) 사라지지 않고 계속 역할을 한다.

(= 만들어진 환경을 기억한다)

그래서 inner 함수를 실행하면 외부함수의 지역변수인 title을 잘 가져올 수 있는 것이다.


즉, 클로저란
외부함수가 종료되어도 여전히 외부함수의 '지역변수'를 내부함수가 사용 가능한 것을 의미한다.

++ 이렇게 내부함수까지 모두 실행되고 나면 비로소 외부함수가 최종 종료된다.

정리

  1. 내부함수가 외부함수의 지역변수에 접근할 수 있고,
  2. 외부함수의 지역변수를 사용하는 내부함수가 소멸될 때까지 외부함수가 소멸되지 않는 특성

이 두 가지를 가리킨다.


출처: https://opentutorials.org/course/743/654
출처: https://www.youtube.com/watch?v=PVYjfrgZhtU

profile
데이터 분석가 준비 중입니다 (티스토리에 기록: https://cherylog.tistory.com/)

0개의 댓글