실행 컨텍스트 Execution Context : 코드의 실행순서와 그 스코프를 기억하고 있다. call stack을 통해서 실행순서를 기억한다. call stack은 single context stack으로 한번의 하나의 일만 처리 가능하다.
전역에 선언된것을 전역 스코프라고 한다.
내부에 선언된것을 블럭 스코프라고 한다.
각각의 블럭은 lexical environment라는 내부 object를 가지고 있다. 그래서 각각 블럭마다 어떤 변수들이 들어있는지, 부모는 누구인지 정보를 가지고 있다. JS는 이런 실행순서와 각각의 블럭에 대한 정보들을 한 object 안에 데이터를 담아두고 있고 , 그 object를 lexical environment라고 한다.
lexical environment에는 환경레코드(Environment Record)와 외부환경참조(Outer Lexical Environment Reference)가 있다.
실행 컨텍스트 스택에서 전역스코프렉시컬환경이 만들어진다.그 다음 블럭 스코프 렉시컬 환경이 만들어진다. 블럭 스코프의 부모는 전역 렉시컬 환경이다.
이러한 연결을 스코프 체인이라고 한다. 블럭이 끝나면 스택에서 빠지고 전역이 다 끝나면 스택은 비게 된다.
==>메모리 절약 뿐 아니라, 성능을 위해서라도 변수는 최대한 필요한 곳에서 정의해야 한다.