클로저 란 외부 함수의 실행이 끝나고 외부 함수가 소멸된 이후에도 내부 함수가 외부 함구의 변수에 접근할 수 있는 구조이다. 쉽게 애기 하자면 자신의 고유 스코프를 가진 상태로 소멸하지 않고 외부 함수에 의해 호출되는 함수를 만드는 것이다.
클로즈는 원래 자바스크립트에서는 함수가 호출되면 메모리에 할당되고 함수가 종료되면 메모리에서 해제되기 때문에 함수별로 선언된 지역변수들은 호출할 때마다 같은 값으로 초기화된다. 하지만 함수를 호출하기 이전에 쓰던 값을 유지 하기위해 사용된다.
var num = 1;
function foo() {
var num = 2;
function bar() {
console.log(num);
}
return bar;
}
var baz = foo();
baz();
위 코드처럼 외부함수가 리턴되어 사라져야 하는데 사라지지 않고 내부함수의 참조로 인해 값을 유지하네 되는 것을 클로저라고 부른다.