실행 컨텍스트 (Execution context)

beablessing·2021년 11월 21일
0
post-thumbnail

실행컨텍스트 (Execution context)

코드를 실행하는데 필요한 환경을 제공하는 객체.
즉, 작성한 코드가 실행되는 환경을 말한다.

simple 진행과정 살펴보기

처음 코드를 실행하면 자바스크립트의 엔진은 콜스택에 전역실행컨텍스트를 담는다. (모든 것을 관리하는 환경이며, 페이지가 종료될 시 함께 사라진다)

함수를 호출할 때마다 콜스택에 또 함수실행컨텍스트를 담는다.

이때, 실행컨텍스트는 LIFO구조의 스택으로 가장 최근 담긴 실행컨텍스트가 현재 활성화된 실행컨텍스트가 된다.

이러한 방식으로 전역에 있는 코드가 마지막 라인까지 모두 실행되면 전역실행컨텍스트도 콜스텍에서 사라진다.

실행컨텍스트의 원칙

  • 첫 코드 실행시 전역컨텍스트가 한개 콜스텍에 쌓인다.
  • 이후 함수 호출시 마다 함수컨텍스트가 생겨난다.
  • 컨텍스트가 생성되면 컨텍스트 안에 변수객체, scope chain, this 가 생성된다.
  • 함수가 실행될때 사용되는 변수들은,현재 활성화된 실행컨텍스트의 변수객체에서 값을 찾고 없다면, 스포크 체인을 따라 이전 환경레코드를 스캔한다.
  • 함수 실행이 마무리되면 해당 함수컨텍스트는 사라지고(클로저 제외), 페이지가 종료되면 전역컨텍스트가 사라진다.

두가지 실행컨텍스트

    1. 전역 실행 컨텍스트(Global Execution Context)

함수내에 없는 코드는 모두 전역실행컨텍스트 안에 존재한다.

하나의 전역실행컨텍스트만이 존재하며, 페이지가 종료될때까지 유지된다.

실행시 전역컨텍스트에 변수객체, scope chain, this가 들어온다

    1. 함수 실행 컨텍트스(Functional Execution Context)

전역 실행 컨텍스트가 생성된 후, 함수가 호출될때마다 새로운 함수실행컨텍스트가 콜스택에 쌓인다.

스코프 체인 (scope chain)

식별자를 결정할때 활용하는 스코프들의 연결리스트이다.
전역객체와 함수스코프의 레퍼런스를 저장하고 있다.

자바스크립트 엔진은 스코프체인을 통해 이전 실행컨텍스트 환경레코드에 저장된 식별자를 참조한다.

1.값출력을 위해 활성화된 실행컨텍스트의 환경레코드를 스캔한다
->
2. 활성화된 컨텍스트에 없을시 이전 컨텍스트를 스캔한다
->
3. 전역까지 계속해서 스캔을 반복하고, 없다면 레퍼런스 에러를 뱉어낸다
->
4. 이때, 같은 식별자가 존재한다면, outer스캐닝을 멈춘다.(식별자를 찾은경우 , 이전스코프 혹은 전역까지 가지 않고 중단)

실행컨텍스트의 3가지 속성

  • 변수객체
    실행컨텍스트가 생성되면 자바스크립트 엔진은 실행에 필요한 정보들을 담을 객체를 생성한다.

변수 객체의 argument 프로퍼티는 함수 호출시 암묵적으로 전달된 arguments 객체를 참조합니다. arguments 객체는 함수 호출 시 넘긴 인자들이 배열로 저장된 객체이다.(?)

  • 스코프체인
  • this
    세팅되지 않은 기본값은 window이다.
    new를 호출함(또는 bind)으로 this를 바꿀 수 있다.









참조 https://www.zerocho.com/category/JavaScript/post/5741d96d094da4986bc950a0

https://ljtaek2.tistory.com/140

https://velog.io/@stampid/Execution-Context%EC%8B%A4%ED%96%89-%EC%BB%A8%ED%85%8D%EC%8A%A4%ED%8A%B8%EB%9E%80

https://www.youtube.com/watch?v=EWfujNzSUmw

profile
프론트엔드 개발자

0개의 댓글