Scope Chain
C언어에서 스코프가 블록{} 이듯이 자바스크립트에서는 함수가 스코프로 된다. 이 유효 범위를 나타내는 스코프는 [[scope]] 프로퍼티로 각 함수 객체 내에서 링크드 리스트형태로 관리되며 이를 스코프 체인이라 한다. 각각의 함수는 [[scope]]프로퍼티로 자신이 생성된 실행 컨텍스트의 스코프 체인을 참조한다. 함수가 실행되는 순간 실행 컨텍스트가 만들어지고 이 실행 컨텍스트는 실행된 함수의 [[scope]] 프로퍼티를 기반으로 새로운 스코프 체인을 만든다. 즉 현재 실행되는 함수의 [[scope]] 프로퍼티를 복사하고 새롭게 생성된 변수 객체를 해당 체인의 제일 앞에 추가한다.
1 | var value = "value1"; |
위와 같은 코드에서 printValue()의 스코프 체인은 [0] 전역 객체 [1] printFunc
변수 객체 가 된다. 그리고 printValue()의 스코프 체인은 [0] 전역 객체 [1] printValue
가 된다. printValue()의 스코프 체인이 [0] 전역 객체 [1] printFunc [2] printValue가 아닌 이유는 printValue()의 생성 시점의 실행 컨텍스트가 무엇인가에 있다. printValue는 전역 객체의 실행 컨텍스트에서 생성 되었으며 그렇기 때문에 전역 객체의 [[scope]]를 참조하게 된다.