클로저
시작하기에 앞서
주의
해당 블로그의 모든 문서는 학습한 내용을 제 방식으로 정리하여 작성하고 있습니다.
순수 창작물도 아니고, 틀린 내용이 있을 수 있으므로 참고하고 읽어주시면 감사하겠습니다.
중첩 함수
function outer() {
const n = 10;
function inner() {
console.log(n);
}
return inner;
}
const someFunc = outer();
someFunc();
함수 내부에서 선언한 함수를 중첩(Nested) 함수라고 합니다.
위 코드에서는 outer()
함수의 내부에서 선언된 inner()
함수가
중첩 함수가 됩니다.
function outer() {
const n = 10;
function inner() {
console.log(n);
}
return inner;
}
const someFunc = outer();
someFunc();
중첩 함수는 (1)그 자체로 반환될 수 있고 (2)외부 변수에 접근할 수 있습니다.
(1) 그 자체로 반환될 수 있다.
11번 라인에서 outer()
함수를 호출하면 중첩 함수인 inner
를 반환하기 때문에
someFunc
에는 inner
함수가 저장됩니다.
(2) 외부 변수에 접근할 수 있다.
그리고 inner()
의 외부 변수인 outer()
함수가 가지고 있는 변수 n
에 접근할 수 있기 때문에,
12번 라인의 someFunc()
의 호출 결과는 콘솔에 10
이 출력됩니다.
클로저는 외부 함수의 변수를 기억하고 이 외부 변수에 접근할 수 있는 함수를 의미합니다.
앞 예제에서는 outer()
함수에서 선언된 변수 n
에 접근할 수 있는 inner()
함수가 클로저가 됩니다.