실행 컨텍스트란, 실행 가능한 코드(전역 코드, 함수 코드)가 실행되기 위해 필요한 환경
실행 컨텍스트는 물리적으로 객체의 형태이다.
클로저란 함수와 그 함수가 선언됐을 때의 렉시컬 환경(Lexical environment)과의 조합이다.
자신을 포함하고 있는 외부함수보다 내부함수가 더 오래 유지되는 경우, 외부 함수 밖에서 내부함수가 호출되더라도 외부함수의 지역 변수에 접근할 수 있는데 이러한 함수를 클로저(Closure)라고 부른다.
function outerFunc() {
var x = 10;
var innerFunc = function () { console.log(x); };
return innerFunc;
}
// 함수 outerFunc를 호출하면 내부 함수 innerFunc가 반환된다.
// 그리고 함수 outerFunc의 실행 컨텍스트는 소멸한다.
var inner = outerFunc();
inner(); // 10
클로저가 실행컨텍스트에서 이미 빠져버린, 자신을 포함하는 외부함수의 지역 변수를 기억할 수 있는 이유는 클로저는 반환된 내부함수가 자신이 선언되었을 때의 환경(렉시컬 환경)인 스코프를 기억해서 자신이 선언되었을 때의 환경(스코프) 밖에서 호출되어도 그 스코프에 접근할 수 있다.