
Closure란, 함수가 선언될(생성될) 그 당시에 주변의 환경과 함께 갇히는 것을 말한다.
이런 설명을 들으면 사실 잘 이해가 안가는데, 먼저 렉시컬 스코프에 대해 알아보자
클로저는 이러한 렉시컬 스코프를 기억하여, 함수가 렉시컬 스코프 밖에서 실행될 때도 이 스코프에 접근 가능하게 해준다.
예를 들어보자
function sayHello () {
const a = 'Hello';
const b = 'World';
function sumString () {
console.log(a + ' ' + b);
}
return sumString;
}
const myFunc = sayHello();
myFunc();
다음 코드에서 myFunc는 sayHello 함수를 호출하는데, 이 함수는 변수 a,b가 담겨있는 sayHello 함수 바깥에 존재함에도 불구하고 a,b를 참조 할 수 있다. 이것은 위에서 설명한 렉시컬 스코프를 기억해 생성되었을때 클로저가 생성되어, 사용하는데 오류가 발생하지 않는 것이다.
요약하자면, 함수는 생성될때, 렉시컬 스코프를 생성하고 기억한다, 이 렉시컬 스코프를 이용하여 스코프 밖에서도 해당 환경(변수)에 접근할 수 있게 해주는 기능을 클로저라고 한다.