ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 실행 컨텍스트
    Web/자바스크립트 2019. 8. 5. 00:26


    1. 실행 컨텍스트의 개념


    C 에서의 콜 스택의 호출 과정을 기억해보자.


    실행 컨텍스트는 콜 스택에 들어가는 실행 정보 하나와 비슷하다. " 실행 가능한 자바스크립트 코드 블록이 실행되는 환경 " 이라고 말할 수 있다.


    여기서의 코드 블록은 대부분의 경우 함수다.  함수로 실행 컨텍스트를 만드는데 이 코드 블록안에 변수, 객체, 실행가능한 코드가 들어있다.


    코드가 실행되면 실행 컨텍스트가 생성, 실행 컨텍스트는 스택 안에 하나씩 쌓이고, 제일 위 실행 컨텍스트가 현재 실행되는 컨텍스트 이다.


    console.log("1");


    function ex1() {

    console.log("2");

    };


    function ex2() {

    ex1();

    console.log("3");

    };


    ex2();


    // 출력 결과

    1

    2

    3

     



    실행 컨텍스트 생성 과정


    그 전에 


    - 활성 객체와 변수 객체


    - 스코프 체인 부터 알아보기


    1. 실행 컨텍스트 생성시 자바스크립트 엔진은 해당 컨텍스트에서 실행에 필요한 여러 정보를 담을 객체를 생성 = > 활성 객체 생성 


    새로 만들어진 컨텍스트로 접근 가능하게 되어 있다. 엔진 내부에서 접근 가능 하다는 것.


    2. arguments 객체 생성


    3. 스코프 정보 생성 : 현재 컨텍스트의 유효 범위를 나타내는 스코프 정보를 생성한다.  이 스코프 정보는 현재 실행 중인 실행 컨텍스트  안에서


    연결리스트와 유사한 형식으로 만들어진다. 이 리스트를 스코프 체인이라고 하며 [[scope]] 프로퍼티로 참조된다.


    4. 변수 생성


    앞서 생성된 활성 객체가 변수 객체로 사용된다. 변수 객체 안에서 호출된 함수 인자는 각각의 프로퍼티가 만들어지고 그 값이 할당된다.


    (값이 넘겨지지 않았다면 undefined 할당)


    5. this 바인딩


    this 키워드를 사용하는 값 할당. 참조 객체 없을시 전역 객체 참조


    6. 코드 실행



    스코프 체인은 어떻게 만들어 질까?


    자바스크립트도 다른 언어와 마찬가지로 스코프, 즉 유효 범위가있다. 이 유효 범위 안에서 변수와 함수가 존재한다.


    자바스크립트에서는 함수 내의 {,} , for() {}, if {} 같은 구문은 C와 달리 유효 범위가 없다. 오직 함수만이 유효 범위의 한 단위가 된다.


    이 휴보 범위를 나타내는 스코프가 [[scope]] 프로퍼티로 각 함수 객체 내 연결리스트 형식으로 관리 되는 것. 이를 스코프 체인 이라 한다


    .

    스코프 체인 정리


    - 각 함수 객체는 [[scope]] 프로퍼티로 현재 컨텍스트의 스코프 체인을 참조


    - 현재 실행되는 함수 객체의 [[scope]] 프로퍼티를 복사하고, 새롭게 생성된 변수 객체를 해당 체인의 제일 앞에 추가


    - 스코프 체인 = 현재 실행 컨텍스트의 변수 객체 + 상위 컨텍스트의 스코프 체인



    예제 )








    Value 변수를 printFunc 변수 객체에서 찾으므로, 결과값은 "value2"가 된다.












    * 송형주, 고현준님의 인사이드 자바스크립트를 보고 원활한 공부를 위하여 요약해보았다.

Designed by Tistory.