효습
2.실행 컨텍스트 본문
실행 컨택스트 : 실행할 코드에 제공할 환경 정보들을 모아놓은 객체
- 동일한 환경에 있는 코드들을 실행할 때 필요한 환경 정보들을 모아 컨텍스트를 구성하고.,
- 이를 콜 스택(call stack)에 쌓아올렸다가,
- 가장 위에 쌓여있는 컨텍스트와 관련 있는 코드들을 실행하는 식으로 전체 코드의 환경과 순서를 보장합니다.
‘동일한 환경’ ,하나의 실행 컨텍스트를 구성할 수 있는 방법
- 전역공간
- eval()함수
- 함수(가장 흔하게 사용)
스택 구조를 잘 생각해보면 한 실행 컨텍스트가 콜 스택의 맨 위에 쌓이는 순간이 곧 현재 실행할 코드에 관여하게 되는 시점
어떤 실행 컨텍스트가 활성화될 때 자바스크립트 엔진은 해당 컨텍스트에 관련된 코드들을 실행하는 데 필요한 환경 정보들을 수집해서 실행 컨텍스트 객체에 저장 ( 이 객체는 자바스크립트 엔진이 활용할 목표로 생성할 뿐 개발자는 볼 수 없음)
VariableEnvironment :현재 컨텍스트 내의 식별자들에 대한 정보+ 욉 환경 정보 , 선언 시점은 LexicalEnvironment의 스냅샷으로, 변경사항이 반영되지 않음
LexicalEnvironment: 처음에는 VariableEnvironment와 같지만 변경 사항이 실시간 반영됨
ThisBinding: this식별자가 바라봐야할 대상 객체
VariableEnvironment
LexicalEnvironment와 같지만 최초 실행 시의 스냅샷을 유지함
실행 컨텍스트를 생성할 때 VariableEnvironment에 정보를 먼저 담은 다음 , 이를 그대로 복사해서 LexicalEnvironment에 담고 이후에는 LexicalEnvironment를 주로 활용함
LexicalEnvironment
컨텍스를 구성하는 환경 정보들을 사전에서 접하는 느낌으로 모아놓은 것
environmentRecord와 호이스팅*
현재 컨텍스트와 관련된 코드의 식별자 정보들이 저장됨
컨텍스트 내부 전체를 처음부터 끝까지 순서대로 수집함
현재 실행될 컨텍스트의 대상 코드 내에 어떤 식뱔자들이 있는지에만 관심이 있고, 각 식별자에 어떤 값이 할당될 것인지는 관심이 없음 따라서 변수를 호이스팅할 때 변수명만 끌어올리고 할당 과정은 원래 자이레 그대로 남겨둠
변수를 선언부와 할당부로 나누어 선언부만 끌어올리는 반명 함수 선언은 함수 전체를 끌어올림
함수 선언문과 함수 표현식
함수 선언문 :
function
정의부만 존재하고 별도의 할당 명령이 없음 , 함수명을 반드시 정의- 전체 호이스팅
함수 표현식 : 정의한 function을 별도의 변수에 할당함 , 함수명이 없어도 됨
기명 함수 표현식은 외부에서 함수명으로 함수를 호출할 수 없음
변수 선언부만 호이스팅
function sum(a,b){ //함수 선언문 sum return a+b } var multiply = function(a,b){ //함수 표현식 multiply return a * b; }
- 동일한 변수명에 서로 다른 값을 할당할 경우 나중에 할당한 값이 먼저 할당한 값을 덮어씌움(override) , 코드를 실행하는 중에 실제로 호출되는 함수는 오직 마지막에 선언된 함수뿐
- 원활한 폅업을 위해서 전역공간에 함수를 선언하거나 동명의 함수를 중복 선언하는 경우는 없어야함
- 만에 하나 전역공간에 동명의 함수가 여럿 존재하는 상황이어도 모든 함수가 함수 표현식으로 정의돼 있었다면 괜찮다.
스코프, 스코프 체인
- 스코프(scope) : 식별자에 대한 유효범위
- 스코프 체인(scope chain) : 식별자의 유효범위를 안에서부터 바깥까지 검색해나감
- outerEnvironmentReference : 선언 시점의 LexicalEnvironment를 계속 찾아 올라가면 마지막엔 전역 컨텍스트의 LexicalEnvironment가 있을 것임
- 오직 자신이 선언된 시점의 LexicalEnvironment만 참조하고 있어서 가장 가까운 요소로부터 차례대로 접근할 수 있고 다른 순서로 접근하는 것은 불가능
- 이러한 특성때문에 여러 스코프에서 동일한 식별자를 선언한 경우에는 무조건 스코프 체인 상에 가장 먼저 발견된 식별자에만 접근 가능함
this
- 실행 컨텍스테의 thisBinding에는 this로 지정된 객체가 저장됨
- 실행 컨텍스트 활성화 당시에 this가 지정되지 않은 경우 this에는 전역 객체가 저장됩니다.
'스터디 > Javascript' 카테고리의 다른 글
3.this (5) | 2022.11.22 |
---|---|
1.데이터 타입 (0) | 2022.11.18 |