실행 컨텍스트 생성 과정
실행 컨텍스트 생성 과정
function execute(param1, param2) {
var a = 1, b = 2;
function func() {
return a + b;
}
return param1 + param2 + func();
}
execute(3, 4);
활성 객체 생성
실행 컨텍스트가 생성되면 자바스크립트 엔진은 해당 컨텍스트에서 실행에 필요한 여러가지 정보를 담을 객체를 생성하는데, 이를 "활성 객체"라고 한다.
활성 객체
: 앞으로 사용하게 될 매개변수나 사용자가 정의한 변수 및 객체를 저장하고,
새로 만들어진 컨텍스트로 접근 가능하게 되어있다.
엔진 내부에서 접근할 수 있다는 것이지 사용자가 접근할 수 있는건 X
arguments 객체 생성
활성 객체는 arguments 프로퍼티로 이 arguments 객체를 참조한다.
스코프 정보 생성
스코프 정보 : 현재 컨텍스트의 유효 범위
현재 실행중인 실행 컨텍스트 안에서 연결리스트와 유사한 형식으로 만들어 진다.
현재 컨텍스트에서 특정 변수에 접근해야 할 경우, 이 리스트를 활용한다.
이 리스트로 현재 컨텍스트의 변수뿐 아니라, 상위 실행 컨텍스트의 변수도 접근이 가능하다.
이 리스트를 '스코프 체인'이라고 하는데, [[scope]] 프로퍼티로 참조 된다.
현재 생성된 활성 객체가 스코프 체인의 제일 앞에 추가되며, execute() 함수의 인자나 지역 변수 등에 접근할 수 있다.
변수 생성
생성되는 변수를 저장하는 변수 객체.
활성객체 === 변수 객체
변수 객체 안에서, '호출된 함수 인자'는 각각의 프로퍼티가 만들어지고 그 값이 할당된다.
만약 값이 넘겨지지 않았다면 undefined가 할당된다.
변수나 내부 함수를 단지 메모리에 생성(instantiation)하고, 초기화(initialization)는 각 변수나 함수에 해당하는표현식이 실행되기 전까지는 이루어지지 않는다.
표현식의 실행은 변수 객체 생성이 다 이루어진 후 시작된다.
this 바인딩
this 키워드를 사용하는 값이 할당된다.
this가 참조하는 객체가 없으면 전역 객체를 참조한다.
코드 실행
실행 컨텍스트가 생성되고, 변수 객체가 만들어진 후에, 코드 실행이 된다.
변수의 초기화 및 연산, 또 다른 함수 실행 등이 이루어진다.