호이스팅은 실행컨텍스트에서 함수 단위로 스콥을 지정하는데, 함수 내부에 정의된 변수를 선언하고 undefined로 초기화 하는 과정을 최상단, 처음에 실행되도록 하는 걸 이야기한다.

자바스크립트는 스콥이 코드 블록 단위가 아닌, 함수 단위이다. 함수 단위로 처리되는 이유는, 함수 실행시 함수 단위로 실행 컨텍스트가 생성되고, 실행 컨텍스트 스택에 쌓이기 때문이다.

실행 컨텍스트 스택은 LIFO의 구조를 가지고 있으며, 현재 실행 되는 실행 컨텍스트를 스택 최상단에 가지고있다. 그러므로 A 함수 안에 B함수를 호출하는 구조라면, 실행 컨텍스트에서 A를 실행할 때는 실행 컨텍스트 스택의 최상단에는 A 함수에 해당하는 실행 컨텍스트가 있고, A 함수 내에서 B 함수를 실행할 때는 B 함수에 대한 실행 컨텍스트가 실행 컨텍스트 최상단에 위치하게 된다.

실행 컨텍스트는 내부에 활성 객체를 가지고 있어, 이는 유사 배열(object) 형태를 띈다. 이 유사 배열 내부에는 scope chain, value object, this object 형태로 3개를 갖게 된다.

실행 컨텍스트

  • Variable Object (변수 객체)
    변수 객체는 함수 내에서 쓰이는 변수, 매개 변수와 넘겨 받은 인수 값 (Parameter, Arguments), 함수 선언 3가지를 갖는다.
  • 변수 (Variable)
  • 매개변수와 인수값 (Parameter, Arguments)
  • 함수 선언
  • Scope Chain (스코프 체인)
    스코프 체인을 통해서, 부모의 프로토타입을 순서대로 스콥 체인에 등록한다.
    그래서, 함수 실행시, 스코프 체인을 통해서 변수가 없다면 부모 스콥을 계속 이동하면서 변수를 찾는다.
  • This Object (This 객체)
    this 객체는 현재 객체가 어떤 this를 가지고 있는지 변경할 수 있다.