JavaScript_Study [ execution context (실행컨텍스트) ]

이준석·2023년 4월 7일
0

JavaScript_Study

목록 보기
12/35
post-thumbnail

2021-09-20 노션페이지,
2021-09-21 노션페이지,
2021-10-04 노션페이지
기록된 노션을 다시 정리

  • 공부했던 웹페이지 부분이 사라져 다시 확인이 안됨ㅠ

    어려웠던 부분

    • 전체의 추상적인 개념
      - 실행 컨텍스트는 실행 가능한 코드가 실행되기 위해 필요한 환경
    • 직관적으로 생각되지 않아 어려웠음

실행컨텍스트란

실행 컨텍스트를 실행 가능한 코드를 형상화하고 구분하는 추상적인 개념이라고 정의한다. 좀 더 쉽게 말하자면 실행 컨텍스트는 실행 가능한 코드가 실행되기 위해 필요한 환경 이라고 말할 수 있겠다. 여기서 말하는 실행 가능한 코드는 아래와 같다.

내 생각엔 코드의 동작 모습이라 생각된다.
=> 스코프에 따라 사용할 수 있는 변수와 데이터
=> 함수들이 스택에 쌓이며 종료되는 시점과 순서
=> 호출됐을 때 바인딩된 this
=> 등등 코드가 돌아가는 모습(?흐름)을 말하는 것 같다

위에서 말하는 실행 가능한 코드란 아래 세가지와 같다

  • 전역 코드 : 전역 영역에 존재하는 코드
  • Eval 코드 : eval 함수로 실행되는 코드 // 거의 사용하지 않음
  • 함수 코드 : 함수 내에 존재하는 코드

실행에 필요한 여러가지 정보란?

  • 변수 : 전역변수, 지역변수, 매개변수, 객체의 프로퍼티
  • 함수 선언
  • 변수의 유효범위
  • this

실행 컨텍스트는 실행 가능한 코드를 형상화하고 구분하는 추상적인 개념이지만 물리적으로는 객체의 형태를 가지며 아래의 3가지 프로퍼티를 소유한다.

1. Variable Object (VO / 변수객체)

당시 이해 했을 땐 자신의 컨텍스트에서 선언한 함수와 변수를 의미
=> 부모에서 선언한 변수와 함수 등 데이터는 스코프체인을 통해 사용

Variable Object는 아래의 정보를 담는 객체이다.

  • 변수
  • 매개변수(parameter)와 인수 정보(arguments)
  • 함수 선언(함수 표현식은 제외)

Variable Object가 가리키는 객체는 아래와 같다

전역컨텍스트 VS 함수컨텍스트

  • 전역 컨텍스트

    최상위에 위치하고 모든 전역 변수, 전역 함수 등을 포함하는 전역 객체(Global Object / GO)를 가리킨다.

  • 함수 컨텍스트

    변수 객체(variable object)는 Activation Object(AO / 활성 객체)를 가리키며 매개변수와 인수들의 정보를 배열의 형태로 담고 있는 객체인 arguments object가 추가된다.

2. Scope Chain (SC)

  • 현재 실행 컨텍스트의 활성 객체(AO)를 선두로 하여 순차적으로 상위 컨텍스트의 활성 객체(AO)를 가리키며 마지막 리스트는 전역 객체(GO)를 가리킨다.

    앞 포스팅에서 말했던 프로토타입 체인과 비교
    1) 프로토타입 체인: object의 property를 탐색할 때
    2) 스코프 체인: 일반 함수의 변수를 탐색할 때

3. this value

  • this값이 할당되며, this는 함수 호출 패턴에 의해 결정된다.

실행컨텍스트 구조의 그림

실행 컨텍스트의 생성과정

  1. 스코프 체인의 생성과 초기화
  2. Variable Instantiation(변수 객체화) 실행

    Variable Instantiation(변수 객체화)는 아래의 순서로 Variable Object에 프로퍼티와 값을 set한다. (반드시 1→2→3 순서로 실행된다.)

    1. (Function Code인 경우) 매개변수(parameter)가 Variable Object의 프로퍼티로, 인수(argument)가 값으로 설정된다.
    2. 대상 코드 내의 함수 선언(함수 표현식 제외)을 대상으로 함수명이 Variable Object의 프로퍼티로, 생성된 함수 객체가 값으로 설정된다.(함수 호이스팅)
    3. 대상 코드 내의 변수 선언을 대상으로 변수명이 Variable Object의 프로퍼티로, undefined가 값으로 설정된다.(변수 호이스팅)
  3. this 바인딩

참조: poiemaweb.com

0개의 댓글