클로저의 개념
- 클로저는 함수를 지칭하고 또 그 함수가 선언된 환경과의 관계라는 개념이 합쳐진 것을 뜻함
- 이렇게 개념만 보면 무슨말인지 모르겠으니 코드를 보면서 이해를 해보자
function outer() {
var a = 1;
var b = 'B';
function inner() {
var a = 2;
console.log(b)
}
inner();
}
outer();
- 실행결과

- inner 내장함수에 b를 선언한 변수가 없다! 그럼 외장함수인 outer로 이동해서 확인한다.
var b = 'B'
가 있으므로 B가 출력됨!
결론
- 클로저는 스코프(각 함수마다 존재, 변수명들의 집합)를 계속 들고있음
- 원래 함수 내부에 선언한 변수는 함수가 끝나면 사라지지만, 클로저가 스코프를 계속 들고 있으므로 그 함수 내부의 변수를 참조할 수 있게 됨
- 마치 Prototype이랑 비슷한 느낌으로? 기본적으로 window라는게 맨 바깥에 있고, 함수를 만들어서 그 함수를 호출했을 때 보여줘야 할 값이 없으면 더 위의 것을 참조하고, 거기에도 없으면 더 위의 것을 참조해서 가져오는거고, 만약 맨 위에도 없으면 undefined이나 오류가 발생하는 것처럼