2020. 3. 5. 09:58ㆍ웹/Javascript
실행 컨텍스트
1. 실행 컨텍스트 개념
ESMAScript에서는 실행 컨텍스트를 실행 가능한 코드를 형상화하고 구분하는 추상적인 개념으로 기술.
콜스택(Call Stack)과 연관하여 정의하면 실행 가능한 자바스크립트 코드 블록이 실행되는 환경, 이 컨텍스트 안에 실행에 필요한 여러 가지 정보가 담김.
※ 콜스택(Call Stack)
함수를 호출할 때 해당 함수의 호출 정보(C언어를 예를 들면, 함수의 호출 정보 등으로 함수 내의 지역 변수 혹은 인자값 등)가 차곡차곡 쌓여있는 스택을 의미
실행 컨테스트의 생성의 의미
현재 실행되는 컨텍스트에서 이 컨텍스트와 관련없는 실행 코드가 실행되면, 새로운 컨텍스트가 실행되어 스택에 들어가고 제어권이 그 컨텍스트로 이동.
예제)
console.log("This is global context");
function ExContext1() {
console.log("This is ExContext1");
}
function ExContext2() {
ExContext1();
console.log("This is ExContext2");
}
ExContext2();
-- 출력 결과 --
This is global context
This is ExContext1
This is ExContext2
설명
전역 실행 컨텍스트가 가장 먼저 실행(전역 실행 컨텍스트라는 것은 가장 먼저 실행되는 컨텍스트일 뿐), 이 과정에서 새로운 함수 호출이 발생하면 새로운 컨텍스트가 만들어지고 실행되며 종료되면 반환.
이와 같은 과정이 반복된 후, 전역 실행 컨텍스트의 실행이 와료되면 모든 실행이 끝남.
2. 실행 컨텍스트 생성 과정
-
활성 객체와 변수 객체
-
스코프 체인
function execute(param1, param2) {
var a = 1, b = 2;
function func() {
return a + b;
}
return param1 + param2 + func();
}
execute(3, 4);
활성 객체 생성
실행 컨텍스트가 생성되면 자바스크립트 엔진은 해당 컨텍스트에서 실행에 필요한 여러가지 정보를 담을 객체를 생성, 이를 활성 객체라고 함.
활성 객체에 앞으로 사용하게 될 매개변수나 사용자가 정의한 변수 및 객체를 저장하고 새로 만들어진 컨텍스트로 접근 가능하게 되어 있음(엔진 내부에서 접근할 수 있다는 것이지 사용자가 직접 접근할 수 있다는 것은 아님)
arguments 객체 생성
활성 객체가 생성된 후, arguments 객체를 생성되며 앞서 만들어진 활성 객체는 arguments 프로퍼티로 이 arguments 객체를 참조.
스코프 정보 생성
현재 컨텍스트의 유효 범위를 나타내는 스코프 정보를 생성, 이 스코프 정보는 현재 실행 중인 실행 컨텍스트 안에서 연결 리스트와 유사한 형식으로 만들어 짐.
이 리스트(스코프 정보)를 스코프 체인이라고 부르며 [[scope]] 프로퍼티로 참조. 현재 생성된 활성 객체가 스코프 체인의 제일 앞에 추가 됨.
이 리스트로 현재 컨텍스트 뿐만 아니라, 상위 실행 컨텍스트의 변수로 접근 가능. 이 리스트에서 찾지 못한 변수는 결국 정의되지 않은 변수에 접근하는 것으로 판단하여 에러 검출
변수 생성
현재 실행 컨텍스트 내부에서 사용되는 지역 변수의 생성이 이루어지는데 실제적으로 앞서 생성된 활성 객체가 변수 객체로 사용.
지역 변수의 생성이 이루어지는 과정에서 변수나 내부 함수를 단지 메모리에 생성만 하고, 초기화는 각 변수나 함수에 해당하는 표현식이 실행되기 전까지는 이루어지지 않음.
this 바인딩
마지막 단계는 this 키워드를 사용하는 값이 할당. 여기서 this가 참조하는 객체가 없으면 전역 객체를 참조.
코드 실행
위의 과정에 의해 하나의 실행 컨텍스트가 실행되고 변수 객체가 만들어진 후에, 코드에 있는 여러 가지 표현식 실행.
표현식이 실행되면서 변수의 초기화 및 연산, 또 다른 함수 실행 등이 이루어 짐.
※ 전역 실행 컨텍스트
전역 실행 컨텍스트의 경우 일반적인 실행 컨텍스트와는 다르게 arguments 객체가 없으며, 전역 객체 하나만을 포함하는 스코프 체인이 존재.
실행 컨텍스트가 형성되는 세가지 중 하나로서 전역 코드가 있는데, 이 전역 코드가 실행될 때 생성되는 컨텍스트가 전역 실행 컨텍스트.
전역 실행 컨텍스트는 변수를 초기화하고 이것의 내부 함수는 일반적인 탑 레벨의 함수로 선언 됨.
전역 실행 컨텍스트의 변수 객체가 전역 객체로 사용되며 전역 실행 컨텍스트에서는 변수 객체가 곧 전역 객체.
전역적으로 선언된 함수와 변수가 전역 객체의 프로퍼티가 됨. 전역 실행 컨텍스트 역시, this를 전역 객체의 참조로 사용됨.
참조
1) INSIDE JavaScript
2) https://poiemaweb.com/js-execution-context
'웹 > Javascript' 카테고리의 다른 글
스코프와 클로저 (0) | 2020.03.05 |
---|---|
스코프 체인 (0) | 2020.03.05 |
this 정체 (0) | 2020.03.05 |
DOM(Document Object Model) (0) | 2020.03.05 |
콜스택과 메모리 힙 (0) | 2020.03.05 |