-
Execution Context 알아보며 나한테 묻는 QA개발 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: 수집하는 정보는 현재 실행 컨텍스트에 대한 변수나 참조에 대한 정보를 갖고있습니다.
이 정보들을 가지고 있어야하는 이유는 현재 실행 컨텍스트에서 변수나 어떤 값들을 가져올 때 어디서 가져올 것이냐를 판단하기 위해서입니다. 또 다른 이유로 현재 실행 컨텍스트를 기준으로 외부 컨텍스트를 참조하는 공간에 대한 정보도 들어있게 되는데 유효범위가 중첩되었을 때, 상위 유효범위를 참조해야하기 때문에 이 정보들을 가지고 있어야 합니다.
(지금 실행되고있는 컨텍스트 내부에서 찾고자하는 식별자가 없을 경우 상위 컨텍스트로 올라가 검색하기 위함 : 스코프체인)
'개발' 카테고리의 다른 글
클로저와 호이스팅에 대한 QA (0) 2022.03.31 최적화에 대해 알아보며 나한테 묻는 QA (0) 2022.03.31 DOM 알아보며 나한테 묻는 QA (0) 2022.03.15 브라우저의 렌더링 과정 & Render Tree와 DOM Tree의 차이점 (0) 2022.03.15 GraphQL - [ useQuery & useLazyQuery ] (0) 2021.02.17