3. 실행 컨텍스트 (2)

gugyeoj1n·2022년 4월 23일
0

자바스크립트

목록 보기
3/9

꿀잠 자려다가 어제 다 못 끝냈으니 지금 빨리 써야겠다. 점심 먹고 근무 가야 됨
이전 글 2. 실행 컨텍스트 를 읽고 이걸 읽으면 되겠다.

outerEnvironmentReference 는 단어 뜻 그대로 외부 환경에 대한 참조, 즉 외부 LexicalEnvironment에 대한 참조이다. 현재 문맥과 관련된 외부 식별자의 정보를 담는다.

var a = 1;

function outer() {
	console.log(a); // 1번째
    
    function inner() {
    	console.log(a); // 2번째
        var a = 3;
    }
    
    inner();
    
    console.log(a); // 3번째
}

outer();
console.log(a); // 4번째

이전 글에서 사용한 코드이다.

inner() 실행 컨텍스트까지 열렸을 때의 콜스택은 [ 전역, outer(), inner() 일 것이고, inner() 의 outerEnvironmentReference 는 바로 밑에 있는 outer() 실행 컨텍스트 전체를 참조한다. 같은 원리로 outer() 의 outerEnvironmentReference 는 전역 공간의 실행 컨텍스트 전체를 참조하게 된다. 이렇게 oER(너무 길어서 줄일란다) 는 Scope Chain 스코프 체인에 관여하는 역할을 갖고 있다. 스코프 체인은 식별자를 찾을 때 자신이 속한 스코프에서 먼저 찾아본 후, 없으면 상위 스코프로 넘어가는 과정을 말한다. oER 이 외부 실행 컨텍스트를 참조하는 과정과 정확히 일치한다. 식별자들은 실행 컨텍스트가 수집해 두고 그 실행 컨텍스트 안에서만 존재하기 때문에 스코프, 식별자의 유효 범위는 실행 컨텍스트라고 할 수 있다.




실행 컨텍스트에 대해 알아 보았다. 이 개념이 잡히니 확실히 코드의 작동 순서가 눈에 잘 보이는 것 같다. 또 콜스택의 존재에 대해 알게 된 점이 좋았는데, 코드 에러가 났을 때 콜스택을 열어보면 도움이 되지 않을까 싶었다. 근데 어떻게 보는지 모름 더 자세하게 알아보고 싶어 구글링을 했더니 자바스크립트에는 콜스택이 하나밖에 존재하지 않는단다. 그럼 실행 컨텍스트가 겁나게 커서 진행이 느리면 굉장히 비효율적이지 않나 ? 왜 굳이굳이 하나만 만든 거지 ?.?

비동기가 답이었다. 비동기가 뭔가 좋다는 건 알고 있었지만 어느 면에서 도움을 주는 건지 감이 안 왔는데 여기 있었다. 이제 리액트에서 함수 쓸 때마다 콜백을 갖다 박는 이유를 알았다. 더 깊게 알아봐야겠다.

물론 근무 끝나고 와서. ㅋ ㅡ ㅋ

0개의 댓글