실행컨텍스트(Execution Context)

성민개발로그·2021년 10월 18일
0

자바스크립트

목록 보기
6/11
post-thumbnail

실행컨텍스트란?

간단하게 EC는 자바스크립트 엔진이 코드를 실행시킬때 생성되는 하나의 환경이다. 실행 가능한 코드가 실행되기 위해 필요한 환경.

종류

1.전역 실행 컨텍스트(Global Execution Context)

전역 실행 컨텍스트 는 브라우저에서 자바스크립트를 처음 로드할 때 생성되는 EC로 어떠한 함수나 객체에도 속하지 않고 전역공간에 놓인 모든 코드들이 속하는 실행 컨텍스트다.
자바스크립트는 싱글스레드 기반 언어이기 때문에 한개의 자바스크립트 파일당 전역 실행 컨텍스트가 하나만 생긴다. 그뒤로 EC가 호출이 될때 자바스크립트의 논리적 스택구조인 Execution Stack에 쌓이게 되는데 맨처음에 쌓이는데 전역 실행 컨텍스트 이다.

2.함수 실행 컨텍스트(Function Execution Context)

자바스크립트 엔진은 함수가 실행될 때마다 해당 함수에 맞는 실행 컨텍스트 를 생성한다 그게 바로 함수 실행 컨텍스트 이다. 실행이되면 Execution Stack 에 쌓이게된다. 다 실행되면 다 실행된 함수 실행 컨텍스트를 pop 하는 구조이다.

3.Eval 함수 실행 컨텍스트(Ecal Function Execution Context)

자바스크립트에선 eval() 함수를 사용하여 문자열 형태로 코드를 실행 하는데 이것도 환경함수를 생성한다.

실행 컨텍스트 스택

간단하게 실행컨텍스트에 생성과정 과 소멸 과정을 코드예제로 보겠다

var global = 'global';
function foo() {
    var local1 = 'local1';
    function bar() {
        var local2 = 'local2';
        console.log(local1, local2, global);
    }
    bar();
}
foo();

일단 변수생성과 함수의 내용을 무시하고 실행 컨텍스트의 생성과 소멸되는 과정만 봅니다

1.전역 실행컨텍스트 가 생성이 됩니다.
2.foo()함수를 실행하기 때문에 foo() 함수 실행 컨텍스트가 실행컨텍스트 스택에 추가됩니다.
3.foo()함수를 실행하면서 내부에 있는 bar()함수도 실행 시켜서 bar()함수 실행 컨텍스트도 stack에 추가 되었다
4.함수 실행이 끝나는 경우 해당 함수는 실행 컨텍스트 스택에서 소멸이 됩니다.
5.마지막으로 전역 실행 컨텍스트도 소멸되면 자바스크립트 엔진도 끝마치게 되는 구조이다.

생성되는 과정

생성단계

생성단계에서는 엔진이 코드를 컴파일하는 과정으로 함수를 호출하긴 하지만 아직 그 내부의 코드를 스캔만 하지 실행하는 단계가 아니다. 이때 엔진은 다음과 같은 일을 수행한다.
실행 컨텍스트가 생성되면 자바스크립트 엔진은 실행에 필요한 여러 정보들을 담을 객체를 생성한다.

실행 컨텍스트의 3가지 객체:

1. variable Object:

변수,매개변수와 인수 정보,함수 선언(함수 표현식은 제외) 이 3가지 정보를 감고있다.

전역 컨텍스트:

전역 컨텍스트의 경우, 변수 객체는 arguments를 가지지 않는다.
그리고 변수 객체는 모든 전역 변수, 전역 함수 등을 포함하는 전역 객체(Global Object / GO)를 가리킨다.
전역 객체는 전역 변수와 전역 함수를 프로퍼티로 가진다.

함수 컨텍스트

함수 컨텍스트의 경우, 변수 객체는 Activation Object(AO / 활성 객체)를 가리킨다.
또한, 전역 컨텍스트와 다르게 매개변수와 인수들의 정보를 배열의 형태로 담고 있는 유사 배열 객체 arguments도 가진다.

2. scope Chain:

스코프 체인은 현재 컨텍스트의 유효 범위를 나타내는 스코프 정보를 담고 있으며, 연결 리스트의 형태와 유사하게 생성된다.
이 리스트를 이용해 현재 컨텍스트의 변수와 상위 실행 컨텍스트의 변수에도 접근할 수 있다.
이 리스트는 현재 실행 컨텍스트의 활성 객체를 먼저 가리키고 순차적으로 상위 컨텍스트의 활성 객체를 가리키고 마지막으로 전역 객체를 가리킨다.즉, 스코프 체인은 식별자 중 변수를 검색하는 것을 말하고, 변수가 아닌 객체의 프로퍼티를 검색하는 것을 프로토타입 체인이라고 한다.

3. this:

this는 함수가 실행하는 방식에 따라 참조하는 객체가 달라진다.

실행 컨텍스트 생성과정:

1.실행 컨텍스트 진입하기전에 먼저 유일한 전역 객체가 생성이된다 전역 객체는 유일하고 이 객체 프로퍼티는 코드 어디든 접근이 가능하다 초기상태에는 빌트인 객체(Math, String, Array 등) BOM, DOM 이 설정이 되어있다.

2.전역객체가 생성후 전역 실행 컨텍스트가 생성되고 실행 컨텍스트 스택에 쌓인다.

3.그 이후에

1.스코프 체인 생성과 초기화

2.변수 객체화 실행

3.this value 결정

변수 객체화 실행중 에 생성된 함수 객체는 [[scopes]] 프로퍼티를 가지게 된다 함수객체만이 소유하는 내부 프로퍼티로서 함수 객체가 실행되는 환경을 가리킨다.[[scopes]] 프로퍼티는 자신의 실행 환경(렉시컬 환경) 과 자신을 포함한 외부함수 실행과 전역 객체를 가리키는데 이때 자신을 포함하는 외부 함수의 실행 컨텍스트가 소멸해도[[scopes]]프로퍼티가 가리키는 외부 함수의 실행 환경(AO활성화 객체)은 소멸하지 않고 참조할 수 있다. 이것이 클로저다

0개의 댓글