[JS] Scope Chain과 Lexical Environment

초이지수·2022년 10월 17일
0

JavaScript

목록 보기
1/4
post-thumbnail

스코프체인이란 도대체 무엇이고? 정적 환경은 또 무엇일까?
무슨 차이인지 알아보자!


🙋🏻‍♀️ ES3 : scope chain (동적처리)

스코프 체인은 실행 컨텍스트와 관련이 있으며 식별자 해결을 위해 사용한다.
식별자를 검색하기 위한 { name: value } 리스트 (오브젝트 리스트) 이다.

  1. 함수가 호출되면 스코프를 생성
    함수의 변수와 함수를 { name: value } 형태로 설정

  2. 생성한 스코프를 scope chain에 연결하고 scope chain에서 식별자를 해결한다.

  3. 동적처리
    함수가 호출되면 그 안에 변수와 함수 이름을 property로 만들고 그 property를 scope chain에 연결 시킨다.
    = 함수가 새로 생길 때마다 scope chain이 동적으로 처리됨


🙋🏻‍♀️ ES5 : Lexical Environment (정적처리)

함수가 호출 되었을 때 함수안에 변수와 함수를 정적환경에 설정하고 이외 처리는 하지 않음.

scope chain은 두 번 동작하게 되는데 (또한 함수가 새로 생길 때마다 동적으로 처리됨)
정적 처리는 하나의 컨텍스트 안에서 한 번 동작하기 때문에 속도가 훨씬 빠르다.


🤔 ES5 이후로는!

scope chain을 렉시컬 환경의 선언적 환경 레코드(Declarative Environment Record)로 대체하는 것!
= 함수가 호출 되었을 때 함수의 변수와 함수 이름을 선언적 환경 레코드에 바인드 한다는 것이다!
(ES3는 scope chain에 바인딩 했었음.)

ES3는 scope chain이라는 구조체가 하나 더 있는 것이고 ES5는 완전하게 하나의 컨텍스트로 진행 되는 것이다.

함수가 호출되어 메모리에 올라갈 때 컨텍스트 하나만 올라가면 됨! = 당연히 처리 속도가 훨씬 빠르다!

profile
닫혀 있어서 벽인 줄 알고 있지만, 사실은 문이다.

0개의 댓글