개발
Execution Context 알아보며 나한테 묻는 QA
Lee_hyojin
2022. 3. 16. 08:38
Q: Execution Context은 왜 필요한가?
A: 코드가 실행되는 환경이자 실행 가능한 코드가 되기 위해서 필요한 환경입니다.
실행 컨텍스트(Execution Context)는 함수를 호출했을 때 생성됩니다.
JS엔진은 코드를 실행하기 위해서 실행에 필요한 여러가지 정보를 알고 있어야 하는데 실행 컨텍스트가 활성화 될 때, JS엔진은 해당 컨텍스트의 코드를 실행하는데 필요한 환경 정보들을 수집에서 실행 컨텍스트에 저장합니다.
제가 생각하기에 실행 컨텍스트로 인해 얻을 수 있는 장점(필요성)을 몇가지 정리해보았습니다.
- 전체 코드의 환경과 순서를 보장하기 위해 필요합니다.
- 코드가 여러번 실행되어도 정보들을 저장해둔 덕분에 동일한 환경을 구성할 수 있습니다.
- 선언에 의해 생선된 모든 식별자들의 변화들을 지속적으로 관리하기 위해 스코프를 구분하여 등록하여 스코프 체인을 통해 상위 스코프로 이동하여 식별자 검색이 가능해지며, 실행 순서를 변경할 수도 있고 다시 되돌아갈 수도 있습니다.
Q: Lexical Environment 가 생성되는 시점은 언제인가?
A: Execution Context가 생성되는 시점에 Lexical Environment가 생성됩니다.
var a = 10;
var b = 20;
function foo(){
console.log('bar');
}
// Global Lexical Environment
LexicalEnvironment = {
a: 10,
b: 20,
foo: <function object>
}
Q: Lexical Environment가 수집하는 정보와 가지고 있어야 하는 이유는?
A: 수집하는 정보는 현재 실행 컨텍스트에 대한 변수나 참조에 대한 정보를 갖고있습니다.
이 정보들을 가지고 있어야하는 이유는 현재 실행 컨텍스트에서 변수나 어떤 값들을 가져올 때 어디서 가져올 것이냐를 판단하기 위해서입니다. 또 다른 이유로 현재 실행 컨텍스트를 기준으로 외부 컨텍스트를 참조하는 공간에 대한 정보도 들어있게 되는데 유효범위가 중첩되었을 때, 상위 유효범위를 참조해야하기 때문에 이 정보들을 가지고 있어야 합니다.
(지금 실행되고있는 컨텍스트 내부에서 찾고자하는 식별자가 없을 경우 상위 컨텍스트로 올라가 검색하기 위함 : 스코프체인)