- 최상에 위치하고 있는 모든 전역 변수, 함수를 포함하는 전역 객체를 가리킨다
- 전역 객체(Global Object/GO)는 전역 변수와 전역 함수를 프로퍼티로 갖고 있는다
- 전역 컨텍스트의 경우, Variable Object, 스코프 체인, this 값은 항상 전역 객체이다
- 특정 함수 내에 있는 코드 이외의 코드는 전역 컨텍스트에서 실행
- 전역 코드 : 전역에 있는 코드
- 페이지가 종료될 때까지 유지된다
- Variable object(VO / 변수 객체)
-var, function 선언(함수 표현식 X),
매개변수(parameter), 인자(argument)- Scope chain -
variable + 모든 부모 스코프- thisValue
-context object
scope chain - 변수를 검색 (실행 컨텍스트가 참조할 수 있는 변수 객체 리스트)
prototype chain - 객체의 프로퍼티, 메소드를 검색
- 객체화 순서
- 매개 변수와 인자 추가
함수 코드 - Variable object(변수 객체)의 프로퍼티로 매개 변수, 값으로 인자 추가
전역 코드 - 매개 변수가 없어서 생략- 함수 호이스팅
코드 내에서 함수 선언 대상으로 Variable object(변수 객체)의 프로퍼티로 함수명, 값으로 생성된 함수 객체 추가- 변수 호이스팅
코드 내에서 변수 선언 대상으로 Variable object(변수 객체)의 프로퍼티로 변수명, 값으로 undefined 생성
- 선언 단계 (Declaration phase)
- Variable Object(변수 객체)에 변수 등록, 스코프가 참조할 수 있는 대상이 된다
- 변수를 실행 컨텍스트 변수 객체에 등록
- 초기화 단계 (Initialization phase)
- Variable Object(변수 객체)에 등록된 변수를 메모리에 할당, undefined로 초기화
- 할당 단계 (Assignment phase)
- undefined로 초기화된 변수에 실제 값을 할당
var a = 1;
function foo() {
var b = 2;
function bar() {
var c = 3;
console.log(a + b+ c);
}
bar();
}
foo();
- javascript 엔진이
<script>
를 읽는다
- 비어 있는 실행 컨텍스트 스택 생성
- 전역 객체 생성 후 전역 실행 컨텍스트가 생성 (스코프 체인 생성과 초기화, 변수 객체화, thisValue 결정)
- 3-1. scope chain 생성, 초기화 : Variable Object(전역 변수 객체)
- 3-2. 변수 객체화 Variable object : a, foo, 매개 변수 null, 인자 null
- thisValue : window
- 비어 있는 실행 컨텍스트 스택에 추가(push)된다 (LIFO, last in first out)
- 전역 코드 foo 함수에 대한 새로운 함수 컨텍스트 생성, 스택에 push
- 5-1. scope chain 생성, 초기화 : 현재 실행 환경 스코프(Activaion Object)
- 5-2. 전역 컨텍스트의 scope chain이 참조하는 객체를 scope chain에 push
따라서 AO -> 전역 객체 순으로 접근 / Scope chain : AO, 전역 컨텍스트 scope chain- 5-3.변수 객체화 : Variable object(변수 객체)의 프로퍼티로 함수명 : foo
- 5-4. 값 : 함수 객체 설정 (프로퍼티 : bar, 값은 새로 생성된 함수 객체)
- 5-5. 변수 객체화 Variable object : b, bar, 매개 변수 null, 인자 null
- 5-6. thisValue : window
- bar 함수에 대한 함수 컨텍스트 생성, 스택에 push
- 6-1. scope chain 생성, 초기화 : 현재 실행 환경 스코프
- 6-2. 외부 함수 컨텍스트의 scope chain이 참조하는 객체를 scipe chain에 push
- 6-3. 전역 컨텍스트의 scope chain이 참조하는 객체를 scope chain에 push
따라서 AO -> 외부 함수 컨텍스트 scope chain -> 전역 컨텍스트 scope chain 참조- 6-4. 변수 객체화 Variable object : c, 매개 변수 null, 인자 null
- 6-5. thisValue : window
- a는 bar AO -> foo AO -> 전역 컨텍스트에서 참조
- b는 bar AO -> foo AO에서 참조
- C는 bar AO에서 참조
- bar 함수 실행이 끝나면 bar 함수 컨텍스트 pop
- foo 컨텍스트 pop
- 전역 컨텍스트 pop