실행 컨텍스트
- 실행 컨텍스트를 이해해야 js의 주요핵심인 scope, hoisting, closure를 이해할수 있다고함.
JS를 실행시키면 엔진은 Call Stack이라는 통에 전역 실행 컨텍스트를 생성,
실행 컨텍스트는 안에 Record와 Outer가 담겨있음.
전역에서 함수 A를 실행했다고 하면? ⇒ 함수A의 실행컨텍스트가 생겨 Call Stack 위에 쌓이게 된다.
1. Record를 통해 JS의 호이스팅 이해
- 호이스팅 : 선언문이 마치 최상단에 끌어올려진 듯한 현상
- JS 엔진이 먼저 전체 코드를 훑어보고 변수같은건 실행컨텍스트의 Record에 기록해놓는다.
- 그리고 선언문만 실행해서 undefined로 Record에 기록. (생성단계)
- 선언문 외 나머지 코드 순차적 실행 이때 Record 참조 (실행단계)
console.log(TVchannel); // undefined => 호이스팅
var TVchannel = "netflix";
console.log(TVchannel); // netflix
Var, Let, Const
2. Outer로 JS 스코프체이닝 이해
- Outer : 외부 환경 참조 (Outer Environment Reference), 바깥 Lexical Environment를 가리킴
- 실행 컨텍스트에서 Record 와 Outer를 Lexical Environment 라고함
- 전역 컨텍스트에서 함수가 실행되어 새로운 함수 컨텍스트가 Stack 위에 쌓일때 outer라는 걸 통해 새로운 실행 컨텍스트에서 아래의 컨텍스트에 접근할 수 있음.\
- 그리고 같은 변수명으로 선언된게 층마다 있더라도 함수 실행시 가장 최상단의 변수만 사용되고 끝 업으면 하나씩 하나씩 내려가면서 찾고 끝.( 이것이 스코프체이닝임)