정의
- 자바스크립트가 실행될 때 생성되는 하나의 실행 단위
- 실행 가능한 자바스크립트 코드 블록이 실행되는 환경
- 실행 가능한 코드 블록은 대부분의 경우 함수가 된다.
목적
개발을 할 때 코드의 복잡성을 관리하기 위해 functions, modules, packages등으로 나눠서 사용하는 것처럼 실행 컨텐스트도 자바스크립트 엔진이 코드의 해석과 실행의 복잡성을 관리할 수 있게 해주는 것이다.
생성
아래 3가지의 경우 실행 컨텍스트가 생성된다.
- 전역 코드
- eval() 함수로 실행되는 코드
- 함수 안의 코드를 실행하는 경우
생성된 실행 컨텍스트는 실행 컨텍스트 스택에 쌓이게 되고 제일 위에 위치하는 실행 컨텍스트가 현재 실행되고 있는 컨텍스트다. 현재 실행되는 컨텍스트에서 이 컨텍스트와 관련 없는 실행 코드가 실행되면, 새로운 컨텍스트가 생성되어 스택에 들어가고 제어권이 그 컨텍스트로 이동한다. 새로운 함수 호출이 발생하면 새로운 컨텍스트가 만들어지고 실행되며, 종료되면 반환된다.
활성 객체 Activation Object (변수 객체)
- 실행 컨텍스트에서 실행에 필요한 여러 가지 정보를 담은 객체
- 매개변수, 사용자가 정의한 변수 및 객체를 저장한다.
- 새로 만들어진 컨텍스트에 접근할 수 있다.
- 엔진 내부에서 접근할 수 있다는 것이지 사용자가 접근할 수 있다는 것은 아니다.
- 변수 객체와 동일한 객체, 표현만 다를 뿐.
생성 과정
- 실행 컨텍스트 생성
- 활성 객체 생성 (변수 객체라고도 한다)
- 활성 객체 내부에서 arguments 객체 생성
- 현재 컨텍스트의 유효 범위를 나타내는 스코프 정보 생성 (스코프 체인 생성)
- 현재 실행 중인 실행 컨텍스트 안에서 연결 리스트와 유사한 형식으로 만들어 진다.
- 현재 컨텍스트에서 특정 변수에 접근해야 할 경우, 이 리스트를 활용한다.
- 현재 컨텍스트의 변수뿐만 아니라 상위 실행 컨텍스트의 변수도 접근이 가능하다.
- 이 리스트를 스코프 체인이라고 한다
[[scope]]
프로퍼티로 참조된다.- 활성 객체가 스코프 체인 제일 앞에 추가된다.
- 지역 변수 생성 (활성 객체에 저장)
- 이 과정에서는 변수나 내부 함수를 단지 메모리에 생성만 한다.
- 초기화는 각 변수나 함수의 표현식이 실행되기 전까지는 이루어지지 않는다.
- 표현식의 실행은 변수 객체 생성이 끝난 후에 시작된다.
- 생성 단계에서 변수의 선언시
undefined
로 값이 초기화되는 데 이것을 호이스팅(Hoising)이라고 한다.
this
키워드를 사용하는 값이 할당된다 (this 바인딩)- 참조하는 객체가 없으면 전역 객체를 참조한다.
- 여러 가지 표현식 실행
- 변수의 초기화 및 연산, 또 다른 함수 실행 등
전역 실행 컨텍스트
- 가장 먼저 실행되는 컨텍스트, 그 뿐이다.
- 전역 코드가 실행될 때 생성되는 컨텍스트가 전역 실행 컨텍스트.
- 전역 실행 컨텍스트는 일반 실행 컨텍스트와 다르게 arguments 객체가 없으며, 전역 객체 하나만을 포함하는 스코프 체인이 있다.
- 전역 실행 컨텍스트의 변수 객체가 전역 객체로 사용된다.
- 전역 실행 컨텍스트의 변수 객체가 곧 전역 객체이다.
- 전역적으로 선언된 함수와 변수가 전역 객체의 프로퍼티가 된다.
- this를 전역 객체의 참조로 사용한다.
- 브라우저에서는 최상위 코드가 곧 전역 코드지만, Node.js에서는 다르다.
출처
'Javascript' 카테고리의 다른 글
[Javascript] 클로저 Closure (0) | 2021.01.05 |
---|---|
[Javascript] 스코프 체인 Scopechain (0) | 2021.01.04 |
[Javascript] 자식창에서 부모창 값 수정하기 (0) | 2016.07.14 |
[Javascript] submit() 함수 POST로 보내기. (0) | 2016.07.12 |
[Javascript] alert 한글 깨짐 현상. (0) | 2016.07.12 |
댓글