JavaScript

실행컨텍스트 (Execution Context)

2023. 9. 4. 22:24
목차
  1. 실행 컨텍스트 : 코드를 실행하는데 필요한 환경을 제공하는 객체
  2. 실행 컨텍스트의 구성
  3. 1. 호이스팅
  4. 2. 스코프 체이닝
  5. Ref

가장 알고싶고도 모르고싶은 주제인 실행컨텍스트에 대해서 알아보겠습니다.

오늘의 블로깅도 모자딥다와 우테코 영상을 전적으로 따릅니다.

실행 컨텍스트 : 코드를 실행하는데 필요한 환경을 제공하는 객체

스코프, 호이스팅, 클로저의 개념과 개념만 알고 있는 상태입니다.

(스코프는 유효범위 .. 호이스팅은 선언을 끌어올린것처럼 동작하는 특징..

클로저는 함수와 그 함수의 렉시컬환경의 조합..어쩌고.. 저쩌고..)

 

실행 컨텍스트를 이해하게 되면

자바스크립트의 주요한 동작들을 이해할 수 있습니다.

 

실행 컨텍스트의 구성

실행 컨텍스트는 직접 접근해서 확인하기 어렵고 

그 구성이 매우 복잡합니다.

 

따라서 실행 컨텍스트의 Lexical Enviroment 안에 있는

환경 Record로 호이스팅을 Outer로 스코프체이닝에 대해서 간단하게 알아보겠습니다.

 

먼저, 실행 컨텍스트의 생성과 삭제는 다음과 같이 이루어집니다.

 

자바스크립트를 실행시키면

자바스크립트 엔진은 Call Stack에

1. 먼저 전역 실행 컨텍스트를 담습니다. 여기에는 환경 Record와 Outer가 담겨있습니다.

2. 만약 함수 foo1를 호출할 경우 함수 foo1의 실행컨텍스트를 실행해서 또 Call Stack에 담습니다.

3. 만약 함수 foo1 안에서 함수 foo2를 호출할 경우 또 실행컨텍스트를  Call Stack에 담습니다.

4. 함수 foo2가 실행 -> 종료 -> 실행컨텍스트 삭제

5. 함수 foo1 실행 -> 종료 -> 실행컨텍스트 삭제

6. 전역 코드 실행 -> 종료 -> 실행컨텍스트 삭제

 

1. 호이스팅

호이스팅이란?

선언라인 전에 변수를 참조할 수 있다.

-> 끌어올려진 듯한 현상

 

왜 이런현상이 발생하느냐?

자바스크립트 엔진이 코드를 스캔하면서 

변수같은 정보를 실행 컨텍스트에 미리 기록 하기 때문에.

 

어디에?

환경 Record : 식별자와 식별자에 바인딩된 값을 기록해두는 객체

 

자바스크립트 엔진은 코드를 스캔하면서

1. 전역 컨텍스트를 생성하고 Call Stack에 넣습니다.

2. 선언할것이 있다면 먼저 선언해둡니다.

3. 선언하는 과정에서 실행 컨텍스트 안에 있는 환경 Record에 식별자를 기록합니다.

선언 : 메모리 공간을 확보하고 식별자와연결

초기화 : 식별자에 암묵적으로 undefined 값 바인딩

 

변수 호이스팅

* var키워드로 선언시 undefined로 초기화(선언, 초기화 동시에 일어남)

* let, const 키워드로 선언시 초기화 안되어서 식별자를 참조할 수 없는 구역(TDZ)

함수 호이스팅

* 함수 선언식 : 선언과 동시에 자바스크립트가 암묵적으로 함수 객체 생성해서 환경 Record에 기록

* 함수 표현식 : var로 표현시 undefined로 초기화 되므로 Type Error/ let, const Reference Error

 

여기까지가

생성 단계 :  본격적인 실행에 앞서 스캔하고 준비하는 단계

실행 컨텍스트를 생성하고 선언문만 먼저 실행해서 환경 Record에 미리 기록해두는 단계

 

이후는

실행 단계 : 선언문 외 나머지 코드를 순차적으로 실행

환경 Record를 참조하거나 업데이트  

 

2. 스코프 체이닝

1. 자바스크립트는 현재 실행중인 실행컨텍스트의 환경 Record를 보고 식별자의 값을 업데이트 합니다.

2. 함수 선언문 방식으로 선언된 함수는 환경 Record에 기록됩니다.

3. 이 함수를 실행하면 새로운 실행 컨텍스트가 실행이 됩니다. 이때 바깥 렉시컬 환경으로 돌아갈 수 있는 outer를 남겨둡니다.

4. 새로 만들어진 실행컨텍스트에 식별자의 값을 기록합니다.

5. 해당 식별자를 사용하려고 환경 Record를 보았을 때 현재 활성화된 실행컨텍스트의 환경 Record를 보고 없으면  

outer 렉시컬 환경으로 가서 계속 찾다가 없으면 전역 실행 컨텍스트의 렉시컬환경까지 찾아봅니다. 여기서도 없다면 undefined로 출력합니다. 있다면 해당 렉시컬 환경에서 식별자를 찾는행위를 멈춥니다.

 

현재 실행중인 실행 컨텍스트는 하나이지만 이전 렉시컬 환경을 가르키는 outer로 타고 갈 수 있다.

스코프 체인 : 식별자를 결정할때 활용하는 스코프들의 연결리스트 

 

Ref

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

 

'JavaScript' 카테고리의 다른 글

[Javascript]이벤트루프  (0) 2023.09.14
This  (2) 2023.09.12
모듈(Module)  (0) 2023.09.01
클로저 (Closure)  (0) 2023.08.30
스코프(scope)  (2) 2023.08.28
  1. 실행 컨텍스트 : 코드를 실행하는데 필요한 환경을 제공하는 객체
  2. 실행 컨텍스트의 구성
  3. 1. 호이스팅
  4. 2. 스코프 체이닝
  5. Ref
'JavaScript' 카테고리의 다른 글
  • [Javascript]이벤트루프
  • This
  • 모듈(Module)
  • 클로저 (Closure)
Summer.dev
Summer.dev
프론트엔드 개발자 Summer 입니다! 피드백은 언제나 환영입니다.
꾸준함이 무기프론트엔드 개발자 Summer 입니다! 피드백은 언제나 환영입니다.
Summer.dev
꾸준함이 무기
Summer.dev
전체
오늘
어제
  • 분류 전체보기
    • Projects
      • Next.js board-project
      • MOMO
    • 원티드
    • 우테코 프리코스
    • JavaScript
    • React
    • TypeScript
    • Node.js
    • Algorithm
      • 코플릿
      • 개념정리
    • 네트워크
    • 오류해결
    • 회고
    • 기술면접준비
    • git,github
    • 소소하게 궁금한것
    • Next.js Beta Docs 번역
    • 디자인패턴
    • 트러블슈팅
    • 번역

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 알고리즘
  • 메모이제이션

최근 댓글

최근 글

hELLO · Designed By 정상우.
Summer.dev
실행컨텍스트 (Execution Context)
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.