호지

[JS 스터디] 코어 자바스크립트 2강 실행 컨텍스트 본문

Front-end

[JS 스터디] 코어 자바스크립트 2강 실행 컨텍스트

_hoji

JS스터디로 코어 자바스크립트를 공부했다.

개인적으로 실행 컨텍스트 내용은 모던자바스크립트 딥다이브 내용이 이해가 더 잘 되서 딥다이브 내용을 많이 참고했다.

 

 

1. 실행컨텍스트란? 

실행할 코드에 제공할 환경 변수들을 모아놓은 객체로 자바 스크립트 동작 원리에 대한 핵심 개념입니다. 실행컨텍스트에서 실행순서는 실행컨텍스트 스택인 콜스택으로 관리하고, LexicalEnvironment를 통해 식별자와 스코프를 관리합니다.

 

2. 콜스택이란?

콜스택은 실행순서를 관리하며, 선입후출인 스택의 자료형을 갖고 있습니다. 가장 최상단에 위치한 실행 컨텍스트는 현재 실행 중인 실행 컨텍스트를 의미합니다. 

 

3. LexicalEnvironment란?

실행컨텍스트에서 식별자와 스코프를 관리하는 하며 VariableEnvironment, LexicalEnvironment, ThisBinding으로 구성되어있습니다. VariableEnvironment와 LexicalEnvironment는 초기값은 똑같으나 LexicalEnvironment에서만 변경 사항이 실시간으로 반영됩니다.

LexicalEnvironment는 environmentRecord와 outerEnvironmentReference로 구성되어있습니다.

environmentRecord에서 식별자와 바인딩된 값을 관리합니다.

outerEnvironmentReference는 상위 스코프의 LexicalEnvironment를 가리키고, 이를 통해 스코프 체인이 구현되어 있습니다.

ThisBinding은 this로 지정된 객체가 저장되며, 실행 컨텍스트가 실행됬을 때 this가 저장되지 않았다면 전역객체(window)가 저장됩니다.

 

4. 함수선언문과 함수표현식의 차이는?

함수선언문은 함수명이 곧 변수명이 되는 선언으로, 함수전체를 호이스팅하기 때문에 함수가 선언되기 전에도 해당 함수를 호출할 수 있습니다.

함수표현식은 변수에 함수를 할당하는 방식으로, 변수명만 호이스팅 됩니다.

함수선언문이 함수전체를 호이스팅에서 의도치 않은 결과를 나타낼 수 있기 때문에 가능한 함수표현식만 쓰는 것이 안전합니다.

 

5. 호이스팅이란?

변수 선언문이 코드 선두로 올려진 것처럼 동작하는 자바스크립트의 고유한 특징입니다. 코드의 실행단계 전 평가 단계에서 실행컨텍스트의 environmentRecord는 순서대로 매개변수의 이름, 함수 선언, 변수명 등을 훑어가며, 초기화 단계를 거칩니다. 따라서 자바스크립트 엔진은 코드 실행 단계전에 해당 환경 코드의 변수명을 알 수 있게됩니다.

 

6.스코프 체인?

스코프체인은 실행컨텍스트의 lexicalEnvironment의 outerEnvironmentReference로 구현되어 있습니다. 단방향 링크드 리스트의 형태로, 가장 가까운 요소부터 순서대로 접근할 수 있습니다. 따라서 동일한 식별자가 있다면, 가장 먼저 발견된 식별자에만 접근할 수 있고, 이보다 상위의 식별자에는 접근할 수 없습니다. 이런 것을 변수 은닉이라고 합니다. 또한 단방향 링크드 리스트이기 때문에 상위 스코프에서 하위 스코프의 식별자에 접근하는 것은 불가능합니다.

 

Comments