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, 정재남 강사님, 코어자바스크립트