2021-09-20 노션페이지,
2021-09-21 노션페이지,
2021-10-04 노션페이지
기록된 노션을 다시 정리
어려웠던 부분
- 전체의 추상적인 개념
- 실행 컨텍스트는 실행 가능한 코드가 실행되기 위해 필요한 환경- 직관적으로 생각되지 않아 어려웠음
실행 컨텍스트를 실행 가능한 코드를 형상화하고 구분하는 추상적인 개념이라고 정의한다. 좀 더 쉽게 말하자면 실행 컨텍스트는 실행 가능한 코드가 실행되기 위해 필요한 환경 이라고 말할 수 있겠다. 여기서 말하는 실행 가능한 코드는 아래와 같다.
내 생각엔 코드의 동작 모습이라 생각된다.
=> 스코프에 따라 사용할 수 있는 변수와 데이터
=> 함수들이 스택에 쌓이며 종료되는 시점과 순서
=> 호출됐을 때 바인딩된 this
=> 등등 코드가 돌아가는 모습(?흐름)을 말하는 것 같다
위에서 말하는 실행 가능한 코드란 아래 세가지와 같다
- 전역 코드 : 전역 영역에 존재하는 코드
- Eval 코드 : eval 함수로 실행되는 코드 // 거의 사용하지 않음
- 함수 코드 : 함수 내에 존재하는 코드
실행에 필요한 여러가지 정보란?
- 변수 : 전역변수, 지역변수, 매개변수, 객체의 프로퍼티
- 함수 선언
- 변수의 유효범위
- this
실행 컨텍스트는 실행 가능한 코드를 형상화하고 구분하는 추상적인 개념이지만 물리적으로는 객체의 형태를 가지며 아래의 3가지 프로퍼티를 소유한다.
1. Variable Object (VO / 변수객체)
당시 이해 했을 땐 자신의 컨텍스트에서 선언한 함수와 변수를 의미
=> 부모에서 선언한 변수와 함수 등 데이터는 스코프체인을 통해 사용Variable Object는 아래의 정보를 담는 객체이다.
- 변수
- 매개변수(parameter)와 인수 정보(arguments)
- 함수 선언(함수 표현식은 제외)
Variable Object가 가리키는 객체는 아래와 같다
전역컨텍스트 VS 함수컨텍스트
- 전역 컨텍스트
최상위에 위치하고 모든 전역 변수, 전역 함수 등을 포함하는 전역 객체(Global Object / GO)를 가리킨다.
- 함수 컨텍스트
변수 객체(variable object)는 Activation Object(AO / 활성 객체)를 가리키며 매개변수와 인수들의 정보를 배열의 형태로 담고 있는 객체인 arguments object가 추가된다.
2. Scope Chain (SC)
- 현재 실행 컨텍스트의 활성 객체(AO)를 선두로 하여 순차적으로 상위 컨텍스트의 활성 객체(AO)를 가리키며 마지막 리스트는 전역 객체(GO)를 가리킨다.
앞 포스팅에서 말했던 프로토타입 체인과 비교
1) 프로토타입 체인: object의 property를 탐색할 때
2) 스코프 체인: 일반 함수의 변수를 탐색할 때
3. this value
- this값이 할당되며, this는 함수 호출 패턴에 의해 결정된다.
실행컨텍스트 구조의 그림
실행 컨텍스트의 생성과정
- 스코프 체인의 생성과 초기화
- Variable Instantiation(변수 객체화) 실행
Variable Instantiation(변수 객체화)는 아래의 순서로 Variable Object에 프로퍼티와 값을 set한다. (반드시 1→2→3 순서로 실행된다.)
- (Function Code인 경우) 매개변수(parameter)가 Variable Object의 프로퍼티로, 인수(argument)가 값으로 설정된다.
- 대상 코드 내의 함수 선언(함수 표현식 제외)을 대상으로 함수명이 Variable Object의 프로퍼티로, 생성된 함수 객체가 값으로 설정된다.(함수 호이스팅)
- 대상 코드 내의 변수 선언을 대상으로 변수명이 Variable Object의 프로퍼티로, undefined가 값으로 설정된다.(변수 호이스팅)
- this 바인딩
참조: poiemaweb.com