클로저란, 내부함수가 외부함수의 지역변수에 접근할 수 있는 특성이다.
자바스크립트에는 가비지 컬렉터 기능이 있다.
가비지 컬렉터란 쓸모 없어진 객체가 차지하는 메모리를 자동으로 해제하는 것을 의미한다.
이 과정에서 자바스크립트의 클로저 개념이 사용된다.
즉, 외부함수가 종료되어 소멸하더라도 내부함수에서 참조하고 있는 변수가 자바스크립트 가비지 컬렉터의 대상이 되지 않는다.
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을 잘 가져올 수 있는 것이다.
즉, 클로저란
외부함수가 종료되어도 여전히 외부함수의 '지역변수'를 내부함수가 사용 가능한 것을 의미한다.
++ 이렇게 내부함수까지 모두 실행되고 나면 비로소 외부함수가 최종 종료된다.
이 두 가지를 가리킨다.
출처: https://opentutorials.org/course/743/654
출처: https://www.youtube.com/watch?v=PVYjfrgZhtU