Skip to main content

클로저

시작하기에 앞서

주의

해당 블로그의 모든 문서는 학습한 내용을 제 방식으로 정리하여 작성하고 있습니다.
순수 창작물도 아니고, 틀린 내용이 있을 수 있으므로 참고하고 읽어주시면 감사하겠습니다.

중첩 함수

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()함수가 클로저가 됩니다.

렉시컬 환경

참고 문서