[JavaScript]호이스팅과 컨텍스트

윤지·2024년 10월 25일

JavaScript

목록 보기
8/30
post-thumbnail

호이스팅

호이스팅: 자바스크립트 엔진이 코드 실행 전 변수와 함수의 선언부를 스코프의 최상단으로 끌어올리는 동작. 면접단골

자바스크립트는 인터프리터 기반 언어로, 코드를 순차적으로 실행하지만 호이스팅으로 인해 선언부가 먼저 처리됨.

변수와 함수 호이스팅 시 처리 방식

  1. 변수 호이스팅

    console.log("name"); //undefined
    console.log("age"); //undefined
    var name = "윤지";
    var age = 24;
    • var: undefined로 초기화됨
    • let과 const: 초기화되지 않은 상태로 메모리에 등록, 일시적 사각지대(TDZ)에 진입
      • 코드 실행 중 명확한 값 할당 시에만 에러 없이 접근 가능함
  2. 함수 선언식 호이스팅

    print(); // 호출 가능 (호이스팅 적용)
    
    function print() {
      console.log("a");
    }
    • 함수 전체가 메모리에 등록됨
    • 코드의 어디에서든 호출 가능함
  3. 함수 표현식의 호이스팅

    print(); // 오류 발생 (Cannot access 'print' before initialization)
    
    const print = function () {
      console.log("a");
    };
    • 변수 선언부만 호이스팅되고, 변수에 undefined 할당 (var로 선언 시)
    • let이나 const로 선언된 함수 표현식은 초기화되지 않은 상태로 TDZ에 머무름
    • 선언 이전 호출 시 에러 발생함

실행 컨텍스트와 스코프

호이스팅의 발생 이유 이해를 위해 실행컨텍스트에 대한 이해 필요

실행 컨텍스트

실행컨텍스트: 자바스크립트를 실행하는 독립적인 공간

실행 컨텍스트의 역할과 중요성

실행 컨텍스트: 자바스크립트 코드 실행 환경. '레코드' 공간에 변수와 함수 이름을 미리 기록하여 다음 기능 수행:

  • 변수와 함수의 쉬운 접근성 보장
  • 코드의 예측 가능한 동작 지원
  • 변수 검색 우선순위 설정

구성 요소

실행 컨텍스트의 두 가지 주요 구성 요소:

  • Record: 변수와 함수 선언을 저장하는 컴포넌트
  • Outer: 상위 스코프를 연결하는 통로
    • 내부 스코프에서 변수 찾을 때, 상위 스코프(외부 환경)를 순서대로 탐색
    • 이 과정을 스코프 체이닝이라고 함
    • 최종적으로 전역 스코프까지 찾아가고, 거기에도 없으면 "name is not defined" 에러 발생

실행 컨텍스트 순서

  1. 생성: 변수, 함수 선언 부분 기록
    1. 변수를 선언하고 초기화
      • var 변수: undefined 할당
      • let/const 변수: 초기화되지 않은 상태로 TDZ에 존재
        • 일시적 사각지대(TDZ): 선언부터 초기화 전까지의 구간
    2. this 키워드를 바인딩
    3. 스코프 범위 결정
  2. 실행: 선언 부분 참조하여 실행
    • 전역 컨텍스트에서 실행 중 함수 만나면 함수 실행 컨텍스트 생성하여 스택에 추가

주요 유형

  • 전역 실행 컨텍스트: 자바스크립트 프로그램이 처음 시작될 때 만들어지는 기본 컨텍스트
  • 함수 실행 컨텍스트: 함수가 호출될 때마다 생성되는 컨텍스트

콜 스택

콜 스택: 실행 컨텍스트를 관리하는 자료구조

콜스택

  • 프로그램 실행 시 '전역 실행 컨텍스트' 생성 및 스택에 '푸시'
  • 스택은 후입선출 방식으로 작동, 마지막에 쌓인 것을 먼저 처리
  • 함수 호출 시마다 해당 함수의 실행 컨텍스트를 스택에 푸시
  • 함수 실행 완료 시 해당 컨텍스트를 스택에서 '팝'
  • 모든 실행 컨텍스트 처리 및 스택이 비워지면 프로그램 실행 종료

함수 실행 컨텍스트가 스택에 푸시된 상태

푸시(Push)와 팝(Pop)

  • 푸시: 스택 최상단에 항목 추가. 콜 스택에서 새 실행 컨텍스트 추가 시 사용.
  • 팝: 스택 최상단 항목 제거. 콜 스택에서 함수 실행 완료 시 컨텍스트 제거에 사용.

스코프

스코프: 실행컨텍스트 안에서 실행되는 유효한 범위

하나의 실행컨텍스트가 하나의 스코프를 갖게 됨(실행컨텍스트 ≠ 스코프)

  • 전역 스코프: 어디서든 접근 가능한 변수나 함수
  • 지역 스코프: 특정 함수 내에서만 접근 가능한 변수나 함수

출처 수코딩

profile
프론트엔드 공부 기록 아카이빙🍁

0개의 댓글