[자바스크립트] 실행 컨텍스트(1) - 개념

이윤우·2022년 10월 26일
0

JavaScript

목록 보기
9/34
post-thumbnail

1. 실행 컨텍스트

(ECMAScript) 실행 가능한 코드를 형상화하고 구분하는 추상적인 개념
=> 실행 가능한 코드가 실행되기 위해 필요한 환경
Scope, Hoisting, this, function, Closure 등의 동작원리를 담고 있는 자바스크립트 핵심원리.

  • 실행에 필요한 정보를 형상화하고 구분하기 위해 자바스크립트 엔진은 실행 컨텍스트를 물리적 객체의 형태로 관리한다. (스택 구조)

    const x = 'xxx';
    
    function foo() {
      const y = 'yyy';
    
      function bar() {
        const z = 'zzz';
        console.log(x + y + z);
      }
      bar();
    }
    foo();

    • 현재 실행 중인 컨텍스트에서 이 컨텍스트와 관련없는 코드(ex. 함수실행)가 실행되면 새로운 컨텍스트가 생성된다.
    • 전역 실행 컨텍스트는 애플리케이션이 종료될 때(웹 페이지에서 나가거나 브라우저를 닫을 때)까지 유지된다.

2. 실행 컨텍스트의 3가지 객체

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

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

실행에 필요한 여러 정보들을 담을 객체 (엔진에 의해 참조되며 코드에서는 접근 불가)

  • 변수
  • 매개변수와 인수 정보
  • 함수 선언(함수 표현식은 제외)
    //함수 표현식
    const getSize = (width, height) => {
    	return width * height;
    };

Variable Object는 실행 컨텍스트의 프로퍼티이기 때문에 값을 갖는데 이 값은 다른 객체를 가리킨다.

  • 전역 컨텍스트의 경우
    • 전역 객체(Global Object / GO)를 가리킨다.
    • 전역 객체는 전역에 선언된 전역 변수와 전역 함수를 프로퍼티로 소유한다.
  • 함수 컨텍스트의 경우
    • 활성 객체(Activation Object / AO)를 가리킨다.
    • 활성 객체는 내부함수와 지역 변수 뿐만 아니라 arguments 객체도 포함한다.
    • arguments 객체는 매개변수와 인수들의 정보를 배열의 형태로 담고 있다.

2) Scope Chain (SC)

전역 객체와 중첩된 함수의 스코프 레퍼런스를 차례로 저장하고 있는 리스트
=> 해당 전역 또는 함수가 참조할 수 있는 변수, 함수 선언 등의 정보를 담고 있는 전역 객체 또는 활성 객체의 리스트

  • 현재 실행 컨텍스트의 활성 객체(AO)를 선두로 하여 순차적으로 상위 컨텍스트의 활성 객체(AO)를 가리키며 마지막 리스트는 전역 객체(GO)를 가리킨다.
    => 렉시컬 스코프 파악 가능 (하위함수 내에서 상위함수의 스코프와 전역 스코프까지 참조할 수 있음)
렉시컬 스코프
: 함수를 어디서 호출하는지가 아니라 어디에 선언하였는지에 따라 결정되는 것

3) this value

this 프로퍼티에는 this 값이 할당된다. this에 할당되는 값은 함수 호출 패턴에 의해 결정된다.

0개의 댓글