[JavaScript] 실행 컨텍스트와 렉시컬 환경?

mj·2021년 5월 24일
0
post-custom-banner

컨텍스트의 사전적 의미, context : 문맥의

실행 컨텍스트는 한 마디로 우리가 작성한 자바스크립트가 어떻게 실행되는 가에 대한 내용입니다.
우리가 웹툰이나 만화책을 본다고 가정합니다. 만화책의 내용은 한 가지일까요? 그 중에는 많은 캐릭터들의 서사와 묘사가 있을 것 입니다. 이야기의 예제는 만화책 원피스입니다.
중심 이야기는 global()이라고 정의해봅시다.

global()은 소년 루피가 해적왕이 되기 위한 과정입니다. 가장 먼저 실행되어 스택에 올라갑니다.

Zoro()는 루피가 동료를 만드는 과정 중에 하나입니다. 또한, 조로는 자신이 세계 제일의 검이 되겠다는 목표를 가지는 자신만의 서사와 묘사가 있습니다. 두 번째로, 스택에 올라갑니다.

BIBI()는 루피가 강적과 맞서싸워 강해지는 에피소드입니다. 세 번째로, 스택에 올라갑니다. 하지만 BIBI()는 루피가 강해진 뒤 에피소드가 종료되어 스택에서 제거됩니다. 역시나 서사와 묘사가 있습니다.

여기서 루피와 동료들의 강함은 에피소드가 종료되어도 유지됩니다. 그리고 새로운 기술들이 생기고 있습니다.

우리는 실행 컨텍스트가 무엇인지 원피스의 이야기로 알 수 있었습니다. 이야기의 전개 순서이죠.
그렇다면 렉시컬 환경은 무엇일까요? 렉시컬 환경은 우리가 본 루피가 해적왕이 되기 위한 과정에서 여러 가지 이야기가 있던 것 처럼, 각 에피소드의 환경을 말하는 것입니다. 각 에피소드에 사용되는 자원들은 전역이 아닌 에피소드 자체에 묶여 있습니다. 하지만 이야기가 전역에서 진행되기 때문에 각 렉시컬 환경끼리는 교류할 수 있습니다.

이야기를 진행하기 앞서 작가는 새로운 기술을 루피에게 추가해 주었습니다. 바로 무장색 패기입니다. 자연계 열매의 능력자들이 너무 밸런스를 붕괴하다보니 무장색 패기가 원래 있던 것 처럼 이야기를 꾸며나갔습니다. 이때, 무장색 패기를 원래 있었던 것처럼 추가하는 것을 우리가 알고 있는 호이스팅(Hoisting)입니다.

원래는 무장색 패기라는 개념 자체가 없었기 때문에 만화책을 읽다보면 자연계는 어떠한 물리 데미지라도 받지 않는데 데미지를 받게 되는 개념 오류가 생깁니다. 호이스팅 과정 중에서 자연계가 먼저 끌어올라간 뒤, 무장색 패기가 다음으로 호이스팅 되기 때문입니다. 따라서 우리는 코드를 작성할 때, 먼저 무장색 패기를 만들었다면 원래 자연계는 무장색 패기가 통한다는 설정을 밀고갈 수 있어 유리한 포지션을 잡을 수 있을 것입니다.

post-custom-banner

0개의 댓글