Javascript/core

Closure란?

student513 2020. 12. 19. 20:51

"지역변수가 함수 종료 후에도 사라지지 않게 할 수 있다." 라고 한다.

이해하고 나면 알겠는데, 설명하기는 참 까다로운 개념이다. 

 

일단 코드부터 보자

var outer = function (){
    var a = 1;
    var inner = function(){
        return ++a;
    };
    return inner;
}
var outer2 = outer();
console.log(outer2());// 출력: 2
console.log(outer2());// 출력: 3

var outer2에 할당된 값은 함수 outer의 반환값 inner이다.

var inner = function(){
    return ++a;
};

딱 요 부분만이 outer2에 할당되는 것이다. 

그런데 inner에 할당된 함수 내에 a라는 값은 선언되어있지 않다.

참조만 하고 있을 뿐이다. 그런데 console.log는 에러도 발생시키지 않고 묵묵히 출력값만 잘 뱉어준다.

 

자신을 실행한 외부 컨텍스트의 지역변수를 참조한 내부 변수는 외부 컨텍스트가 종료되더라도 그 값을 유지하는 것이다.

이런 현상을 closure라고 한다.

 

필요한 지역변수 외의 함수를 유지하고 싶지 않을 때 클로저를 이용한다. 

 

 

출처: Javascript 핵심 개념 알아보기 - JS Flow, 정재남 강사님, 코어자바스크립트