JavaScript 실행 컨텍스트

광로·2024년 3월 4일
  • Execution Context (실행컨텍스트)

-> 코드가 실행 되기 위해 필요한 모든 정보를 담고 있는 환경 및 객체.

JS는 같은 객체나 환경에 있는 정보들을 모아놓은 실행 컨텍스트를 Call Stack에 쌓아 실행하여
코드의 순서를 보장 할 수 있다.
또한 어떻게 식별자 (변수, 함수등)와 스코프를 관리하는지 , 그리고 코드 실행 순서를 결정하는 핵심 메커니즘 입니다.

크게 3가지로 나뉘게 되는데

  1. Global Execution Context (글로벌 실행 컨텍스트)
  • 코드가 실행되기 시작할 때 생선되는 기본 컨텍스트 (코드가 로드 되자마자 생성)
  • 변수나 함수 선언 등 전역적인 스코프를 가진 식별자들을 관리
  • 한 프로그램에는 하나의 글로버 컨텍스트만 존제 합니다.
  1. Function Execution Context (함수 실행 컨텍스트)
  • 함수가 호출 될 때마다 생성
  • 각 함수 호출마다 고유한 실핸 컨텍스트가 생성되며, 함수의 매게변수, 지역변수, 그리고 함수 실행에 필요한 다른 정보를 포함
  • 실행 컨텍스트 스택, 또는 Call Stack에 푸시되어 관리
  1. Eval
  • 'eval' 함수를 통해 실행되는 코드 블록을 위한 컨텍스트
  • 일반적으로 사용을 지양하는 편이 좋으며, 보안상의 이유와 최적화 문제로 인해 사용이 권장되지 않음.

[1] Eval 함수를 권장하지 않는 이유?

  • 악의적 코드 실행
    -> 주어진 문자열을 코드로 실행하기 때문에, 사용자 입력을 그대로 'eval'에 전달하는 경우 악의적인 스크립트가 실행 될 수 있음.

  • 성능 문제
    -> 최적화 어려움 : 실행되는 코드는 실행 시간까지 내용이 확정되지 않으므로, 엔진이 사전에 최적화하기 어려움

  • 디버깅 어려움

-> 문자열로 된 코드가 실시간으로 실행되기 떄문에, 오류가 발생 했을 때 원인을 찾기가 훨 씬더 복잡해집니다. 추가적으로 코드의 가독성과 유지 보수성도 저하 됨

등이 있으며, 비교적 자유로운 'JSON.parse' 'new Function'을 사용 할 수 있습니다.

** 실행 컨텍스트 내부에는 variable environment, lexical environment, this binding아 있습니다.

  1. VariableEnvironment
  • 변수, 함수선언 그리고 변수의 최신 상태를 기록 합니다.
  • 외부 환경 참조 (Outer Lexical Environment Reference) : 외부 스코프와 관련된 정보를 가지며, 스코프 체인을 형성
  • this 바인딩 : 실행 컨텍스타가 관련된 객체에 대한 참조
  1. lexical environment
  • 초기에는 Variable Environment와 같지만 변경 사항이 실시간 적용
    다시 말해서 초기 상태를 기억 하고 있으며, LexcialEnvironment 최근의 모습을 저장 하고 있음
  1. this binding
  • this 값은 함수 호출 방식에 따라 결정 됨, 이 값은 실행 컨텍스트가 활성화 될떄 설정 되며, 메서드 호출 , 일반 함수 호출, 생성자 호출 등의 다양한 방식에 따라 달라진다.

정리

** 실행 컨텍스트는 자바스크립트 엔진이 코드를 실행하는 방식을 정의하며, 이 구성 요소들은 변수화 함수의 호이스팅, 스코프 결정 , 스코프 체인 형성, 그리고 this 바인딩 방식을 결정
이러한 메커니즘은 JS의 동작 원리를 이해하는데 핵심적인 역할을 하며, 코드의 실행 흐름과 데이터 접근 방식을 정의함.

profile
많이 느리지만, 포기하지 않는 개발자 (돌에 새기는 느낌 )

0개의 댓글