Execution : 실행
Context : 문맥/환경 (코드에 영향을 주는 주변 코드, 변수들 )
Execution Context : 코드를 실행하는데에 필요한 배경이 되는 환경
자바스크립트에서 동일한 조건을 지닐 수 있는 조건 : 4가지
전역공간(거대한 함수 공간), 함수, eval(문제 덩어리 빼자), module(함수와 동일)
→ 결론은 실행 컨텍스트를 구성하는 방법은 함수를 실행 하는 것뿐
→ 함수를 실핼할 때 필요한 환경정보를 담은 객체
ES6에서 추가된 블록 스코프인 let, const에 대해서 별개의 독립된 공간으로서의 역할은 가지지만
별개의 실행 컨텍스트를 생성하지는 않는다.
call statck : 코드 실행에 관여하는 스택
현재 어떤 함수가 동작중인지, 다음에 어떤 함수가 호출될 예정인지 등을 제어하는 자료구조
VariableEnvironment, LexicalEnvironment : 현재 환경과 관련된 식별자 정보들이 담김
VariableEnvironment : 식별자 정보 수집 (변화 반영 X)
LexicalEnvironment : 각 식별자의 데이터 추적 (변화 반영 O)
어휘적/ 사전적 환경 : 실행 컨텍스트를 구성하는 환경 정보들을 모아 사전처럼 구성한 객체
영한 사전
able : 할 수 있는
apple : 사과
arrow : 화살표,
실행 컨텍스트 A 환경 사전
내부 식별자 a : 현재 값은 undefined
내부 식별자 b : 현재 값은 20
외부 정보 : D를 참조
호이스팅은 실제하는 현상이 아니고 environmentRecord 의 정보 수집 과정을 좀 더 쉽게 이해하기 위해서 만든 허구의 개념
실행 컨텍스트의 맨 위로 식별자 정보를 끌어올리다.
함수 선언문은 전체를 끌어올린다.
함수 표현식은 var sum 만 끌어 올린다.
// 함수 선언문
function sum(a,b) {return a+b}
// 함수 표현식
var sum = function(a,b) {return a+b}
외부의 LexicalEnvironment를 참조
현재 문맥에 관련 있는 외부 식별자 정보
스코프는 변수의 유효범위 이다.
실행 컨텍스트가 수집해 놓은 정보만 접근할 수 있고
그 변수는 실행 컨텍스트 내부에서만 존재
var a 를 찾는데
inner 에 var a가 없으면
outer 에 var a를 찾고 outer 에도 var a가 업으면
전역에서 var a 값을 찾아 갖고 온다.
스코프 체인 : 가까운 곳으로 부터 찾아서 가장 먼저 찾아진 것만 접근 가능