JavaScript의 클로저
이제 클로저 (closure) 개념을 공부해 봅시다. 사실 여러분은 이미 이 개념에 익숙하므로, 올바른 용어만 알면 됩니다.
그렇다면, 클로저는 함수와 그 함수가 접근할 수 있는 모든 외부 변수들의 조합입니다. 또는 다르게 말하면, 클로저는 함수와 그 함수의 어휘적 환경(렉시컬 환경)입니다.
JavaScript에서 흔히 "함수의 클로저"라고 말할 때, 그 함수 자체를 의미하는 것이 아니라 정확히는 그 함수의 외부 변수들을 의미합니다. 만약 어떤 함수가 자신의 어휘적 환경에서 변수를 가져오면, "변수가 클로저에서 가져와진다" 고 말합니다.
이전 강의에서 우리가 작성한 코드를 다시 떠올려 봅시다:
function test() {
let num = 1;
return function() {
console.log(num);
}
}
let func = test();
func(); // 1을 출력함
이 경우, func 함수가 변수
num의 값을 클로저에서 가져온다고 말할 수 있습니다.
또한 func 함수가 변수
num의 값을 클로저에 저장한다고 말할 수도 있습니다.