클로저란
어떤 함수가 선언한 변수를 참조하는 내부 함수를 외부로 전달할 경우, 함수의 실행 컨텍스트가 종료된 후에도 해당 변수가 사라지지 않는 것을 말한다.
쉬운 예제
var outer = function () {
var a = 1;
var inner = function () {
return ++a;
}
return inner;
};
var outer2 = outer();
console.log(outer2()); // 2
console.log(outer2()); // 3
inner에 대한 함수 자체의 참조가 사라지지 않으면서 inner의 외부 렉시컬 공간 정보가 이미 outer 함수는 콜스택에서 사라졌음에도 사라지지 않는 것이다.
쉬운 예시로 return으로 외부 공간에 전달되는 것을 얘기했지만 이 외에도
setinterval, addEventListener, Promise await 등 적용되는 사례가 많다
=> 클로저란 어떤 함수 A에서 선언한 변수 a를 참조하는 내부함수 B를 외부로 전달할 경우 A의 실행 컨텍스트가 종료된 이후에도 변수 a가 사라지지 않는 현상