함수컨텍스트는 호출시에 만들어진다.
즉 호출하기전에는 컨텍스트가 아직 없는거다.
컨텍스트는 스코프로시작해서 this 로끝난다.
컨텍스트는 한국말로 번역하면 문맥입니다.
쉽게 코드의 실행 환경이라고 이해하시면 될 거 같습니다.
먼저 전역 컨텍스트 하나 생성 후,
함수 호출 시마다 컨텍스트가 생깁니다.
컨텍스트 생성 시 컨텍스트 안에 변수객체(arguments, variable), scope chain, this가 생성됩니다.
컨텍스트 생성 후 함수가 실행되는데,
사용되는 변수들은 변수 객체 안에서 값을 찾고,
없다면 스코프 체인을 따라 올라가며 찾습니다.
함수 실행이 마무리되면
해당 컨텍스트는 사라집니다.
(클로저 제외)
페이지가 종료되면 전역 컨텍스트가 사라집니다.
전역 컨텍스트
전역 컨텍스트가 생성된 후
변수객체, scope chain, this가 들어옵니다.
전역 컨텍스트는 arguments(함수의 인자를 말합니다)가 없고요.
variable은 해당 스코프의 변수들입니다.
name, wow, say가 있네요.
scope chain(스코프 체인, 자신과 상위 스코프들의 변수객체입니다)은 자기 자신인 전역 변수객체입니다.
this는 따로 설정되어 있지 않으면 window입니다.
this를 바꾸는 방법이 바로 new를 호출하는 겁니다.
(또는 함수에 다른 this 값을 bind할 수도 있습니다)
일반 함수의 this가 왜 window인지 아시겠죠?
원래 기본적으로 window고 new나 bind같은 상황에서 this가 바뀌는 겁니다.

[실행컨텍스트 종류]
(1) 전역코드의 실행컨텍스트
전역 객체(Global Object)의 실행컨텍스트
전역 객체는 1개 뿐임 : 객체의 프로퍼티를 통해 전역변수, 전역함수 등 프로그램 어디든 접근 가능
전역 객체 프로퍼티를 보고싶다면 크롬개발자도구에서 window를 치고 엔터
전역 객체에는 기본적으로 Built-in object(Math, String, Array 등) BOM(window 객체), DOM이 세팅되어있음
생성과정은 아래에 나와있는 것과 같음(변수객체, 스코프 정보 생성 및 초기화, this 바인딩)
(2) 함수코드의 실행컨텍스트
- 함수 정보가 저장되는 객체의 컨텍스트
[실행컨텍스트 생성 및 파기과정]
(1) 스코프 정보(스코프 체인) 생성
(2) 변수 객체(Variable Object, 줄여서 VO) 생성
(3) this 바인딩
(4) 코드 실행
(5) 실행컨텍스트 파기
함수코드의 실행컨텍스트 함수 실행이 끝나면 해당 함수의 실행컨텍스트를 파기함
전역코드의 실행컨텍스트는 어플리케이션 종료 시 파기함
컨트롤은 이전 컨텍스트에 반환됨