실행 컨텍스트

어승준·2023년 9월 27일
0

10분 테코톡 정리

목록 보기
6/16
post-thumbnail

📌 실행 컨텍스트 맛보기

  • JS 코드 실행 시, JS 엔진은 콜 스택이라는 통에 전역 실행 컨텍스트를 담는다
  • 전역에서 함수 A 호출 시, 또 A의 실행 컨텍스트를 생성해서 콜 스택에 담음
  • 함수 B에서 함수 A 호출 시, 또 B의 실행 컨텍스트를 생성해서 콜 스택에 담음
  • 함수 B의 실행을 마치고, 함수 B가 종료되면, 해당 실행 컨텍스트가 사라짐

📌 Record로 JS 호이스팅 이해하기

  • 선언문 위에서 출력 시, 에러 발생하지 않고 undefined 출력 (호이스팅)
  • 호이스팅 발생 이유 - 선언문이 있는 코드라인을 물리적으로 최상단으로 끌어올렸기 때문이 아니라, JS 엔진이 먼저 전체 코드를 스캔하면서 변수 같은 정보를 실행 컨텍스트 어딘가에 미리 기록해놓기 때문. 이 때 기록해놓는 곳이 environment record(환경 레코드)로 식별자와 식별자에 바인딩된 값을 기록

▶️ 변수 호이스팅 (Variable Hoisting)

  1. 생성 단계 (Creation Phase)
    • Execution Context 생성
    • 선언문만 실행해서 Environment Record에 기록
  2. 실행 단계 (Execution Phase)
    • 선언문 외 나머지 코드 순차적으로 실행
    • Environment Record 참조하거나 업데이트
    • var는 생성단계에서 undefined로 값을 초기화 (선언, 초기화 동시에 이루어짐)
    • let, const는 선언만 할 뿐, 초기화 x, 따라서 선언문 이전에 참조 시 Reference Error 발생
    • 일시적 사각지대 (let, const로 선언 시, 선언 이전 식별자 참조할 수 없는 구역)

▶️ 함수 호이스팅 (Function Hoisting)

  • 변수에 함수를 담아서 함수를 선언하는 방식을 함수 표현식이라고 하는데, 함수를 변수에 담고 있기 때문에 변수 호이스팅과 똑같이 동작함

  • var의 경우, 환경레코드에 기록되어 있는 study의 값은 undefined이고, 해당 데이터 타입은 함수와 달리 호출될 수 없기 때문에 Type Error 발생

  • const의 경우, 환경레코드에 기록되어 있는 값이 없기에 Reference Error 발생

  • 함수를 변수에 담지 않고, function 키워드로 선언하는 방식을 함수 선언문이라고 하며, 선언과 동시에 함수가 생성되어 선언 전에도 함수 사용 가능

  • JS 엔진에 study 함수의 선언과 동시에 완성된 함수 객체({study : f{}})를 생성해서 환경레코드에 기록. 에러 없이 실행 가능.

  • 핵심 키워드 정리


📌 Outer로 JS 스코프체이닝 이해하기

  • Outer Environment Reference (외부 환경 참조) - 바깥 Lexical Environment를 가리킴.
  • Environment Record와 Outer Environment Reference를 합쳐서 Lexical Environment (정적 환경)라고 함

  • 현재 활성화된 실행 컨텍스트의 환경레코드를 먼저 봄. 없으면 outer가 가리키는 바깥 렉시컬 환경에서 찾음. 또 없으면 다시 outer로 바깥 렉시컬 환경 반복. 전역 실행 컨텍스트에서 다 찾아도 없으면 Reference Error.

  • 현재 활성화된 실행 컨텍스트(콜 스택 최상위) (3층)에 없으면, outer가 가리키는 바깥 렉시컬 환경(2층)에서 찾음. 있으면, 더 이상 바깥 렉시컬 환경(1층)으로 가지 않음. 2층의 lamp와 1층의 lamp가 같은 이름이기 때문에, 즉 식별자가 같기 때문에, 1층의 lamp가 켜져있는지 꺼져있는지는 알 수 없다. 이를 변수 섀도잉이라 하며, 이는 동일한 식별자로 인해 상위 스코프에서 선언된 식별자의 값이 가려지는 현상이다.

  • 식별자 결정 - 코드에서 변수나 함수의 값을 결정하는 것 (콜 스택 안에 동일한 식별자가 여럿일 때, JS 엔진이 어떻게 outer를 활용해서 의사결정을 할까?)

  • 이전 렉시컬 환경을 가리키는 outer로 타고타고 갈 수 있다. 여기서 스코프 체인이라는 용어가 나오며, 식별자를 결정할 때 활용하는 스코프들의 연결리스트라는 뜻이다.

  • 핵심 키워드 정리


📌 Execution Context 정리

  • 실행 컨텍스트
    • 코드를 실행하는 데 필요한 환경(조건이나 상태)을 제공하는 객체
    • 코드를 실행할 때, 식별자를 더욱 효율적으로 결정하기 위한 수단으로써 필요한 정보를 한데 모아 제공하는 객체

📌 정리


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

profile
鈍筆勝聰(둔필승총) : '둔한 붓이 총명함을 이긴다' (서툴더라도 기록으로 남기는 것이 사람의 기억보다 훨씬 오래 보전된다) - 정약용

0개의 댓글