스코프체인이란 도대체 무엇이고? 정적 환경은 또 무엇일까?
무슨 차이인지 알아보자!
스코프 체인은 실행 컨텍스트와 관련이 있으며 식별자 해결을 위해 사용한다.
식별자를 검색하기 위한 { name: value } 리스트 (오브젝트 리스트) 이다.
함수가 호출되면 스코프를 생성
함수의 변수와 함수를 { name: value } 형태로 설정
생성한 스코프를 scope chain에 연결하고 scope chain에서 식별자를 해결한다.
동적처리
함수가 호출되면 그 안에 변수와 함수 이름을 property로 만들고 그 property를 scope chain에 연결 시킨다.
= 함수가 새로 생길 때마다 scope chain이 동적으로 처리됨
함수가 호출 되었을 때 함수안에 변수와 함수를 정적환경에 설정하고 이외 처리는 하지 않음.
scope chain은 두 번 동작하게 되는데 (또한 함수가 새로 생길 때마다 동적으로 처리됨)
정적 처리는 하나의 컨텍스트 안에서 한 번 동작하기 때문에 속도가 훨씬 빠르다.
scope chain을 렉시컬 환경의 선언적 환경 레코드(Declarative Environment Record)로 대체하는 것!
= 함수가 호출 되었을 때 함수의 변수와 함수 이름을 선언적 환경 레코드에 바인드 한다는 것이다!
(ES3는 scope chain에 바인딩 했었음.)
ES3는 scope chain이라는 구조체가 하나 더 있는 것이고 ES5는 완전하게 하나의 컨텍스트로 진행 되는 것이다.