클로저를 한 문장으로 정리하면,
현재의 유효범위를 넘어 Scope Chain으로 연결되어 있는 객체, 변수등의 참조를 발생시키는 것
코드로 예를 들어보면
function outer() {
var count = 0;
function inner() {
count++;
console.log(count);
}
return inner;
}
var increment = outer();
increment(); // 1
increment(); // 2
increment(); // 3
// outer 함수는 count 변수를 선언, inner 함수 반환
// 반환된 inner 함수는 count 변수 참조, count 값을 증가시킨 후에 출력
// outer 함수를 실행하면, count 변수와 함께 inner 함수가 반환
// increment 변수에 inner 함수 할당, increment 함수 호출
// inner 함수는 count 변수에 접근, count 값 증가 후 출력
// increment 함수를 호출할 때마다 count 값 계속 증가
클로저는 실행 컨텍스트의 관점에 설명하면, 내부함수가 유효한 상태에서 외부함수가 종료하여 외부함수의 실행 컨텍스트가 반환되어도, 외부함수 실행 컨텍스트 내의 활성 객체(Activation object)(변수, 함수 선언 등의 정보를 가지고 있다)는 내부함수에 의해 참조되는 한 유효하여 내부함수가 스코프 체인을 통해 참조할 수 있는 것을 의미한다.
클로저는 자신이 생성될 때의 환경을 기억하는 함수다
'CS > 기타' 카테고리의 다른 글
자바스크립트에서 Event Loop란? (0) | 2023.05.13 |
---|---|
서버(Server)란 무엇일까? (0) | 2023.05.01 |
자바스크립트(Javascript) 비동기의 역사 (0) | 2023.04.06 |
CSS 애니메이션과 Javascript 애니메이션의 차이? (0) | 2023.04.06 |
이벤트 루프(Event Loop)란? (0) | 2023.04.05 |