실행 컨텍스트

hh824·2022년 7월 13일

자바스크립트

목록 보기
2/6
post-thumbnail
// 우아한 테크 10분 테크톡에 하루님이 진행하신 실행 컨텍스트 유튭 영상을 정리해 보았습니다.

자바스크립트 엔진이 코드를 해석하고 실행하는 과정

  1. 자바스크립트 코드를 실행시키면 자바스크립트 엔진은 콜 스택에 전역 실행 컨텍스트를 담는다.
    실행 컨텍스트에는 환경 레코드와 아우터가 있다.(다른것들도 있지만 간략화해서 설명)
  2. 전역에서 함수 A를 호출할 경우, 함수 A의 실행 컨텍스트를 생성해서 콜 스택에 담는다.
  3. 콜 스택은 가장 나중에 담긴 실행 컨텍스트만 활성화 된다.
  4. 가장 나중에 담긴 실행 컨텍스트가 활성화 되고 종료되면, 그 실행 컨텍스트는 사라진다.
  5. 전역에 있는 코드가 마지막 라인까지 모두 실행되면 전역 실행 컨텍스트도 사라진다.

환경 레코드로 JS 호이스팅 이해하기

  1. 환경 레코드란?
    식별자와 식별자에 바인딩된 값을 기록하는 객체.

  2. 변수 호이스팅
    자바스크립트 엔진은 코드를 실행하면 우선 실행 컨텍스트 한칸을 생성해서 콜스택에 넣는다.
    그 후 전체 코드를 스캔하면서 선언할게 있는지 찾아보고 있다면 먼저 선언해 둔다.

  • var로 선언한 경우
    선언과 초기화도 같이 되기때문에 undefind로 콜스택에 들어가 있을것이다.
  • let, const로 선언한 경우
    자바스크립트 엔진이 식별자를 기록해두기는 하지만 값을 초기화하지는 않는다.
    선언문 이전에 값을 참고하려고 하면 Reference Error가 발생한다.
    (let이나 const로 선언한 경우에는 선언 이전에 식별자를 참조할 수 없는데 이 구역을 일시적 사각지대라고 부른다.)
    생성단계 - 실행 컨텍스트 생성하고, 선언문만 실행해서 환경 레코드에 기록한다.
    실행단계 - 선언문 외 나머지 코드 순차적으로 실행, 환경 레코드를 참조하거나 업데이트 한다.
  1. 함수 호이스팅
  • 함수 표현식 방식
    변수 호이스팅과 동일하게 동작한다.
study()
var study = () =>{
	//do study
}

-> study는 호이스팅에 의해 읽을수는 있지만 undefind 상태이고, 호출한다면 함수가 아닌 undefind이기 때문에 Type Error가 나온다.

let const의 경우에는 일시적 사각지대로 인해 선언이 되어있지 않은 상태로 나오게 된다. (Reference Error)

  • 함수 선언문 방식
    선언과 동시에 함수가 생성되어 선언 전에도 함수를 사용할 수 있다.(호이스팅이 된다.)
    (함수가 선언되기 전에도 함수를 사용할 수 있기 때문에 사용을 지양하는 편이다.)

외부 환경 참조(outer)

  • 바깥 렉시컬 환경을 가리킨다.
    자바스크립트 엔진은 현재 활성화된 실행 컨텍스트의 환경 레코드를 보고 변수, 함수의 값을 결정한다.

  • 식별자 결정
    코드에서 변수나 함수의 값을 정하는 것이다.

  • 콜스택 안에 동일한 식별자가 여럿일 때 자바스크립트 엔진이 어떻게 아우터를 활용해서 의사결정을 하는지?
    자바스크립트 엔진이 새로 생성된 샐행 컨텍스트에 바깥 렉시컬 환경으로 돌아갈 수 있는 아우터를 남겨 놓는다.
    필요한 경우에 이전 실행 컨텍스트의 환경레코드에 저장된 식별자도 참조할 수 있다.

  1. 어떠한 값을 결정할 때 먼저 현재 활성화 된 실행 컨텍스트의 환경 레코드를 먼저 확인한다.
  2. 만약 어떤한 값을 찾는데 현재 활성화 된 실행 컨텍스트의 환경 레코드를 확인했을 때도 값이 나오지 않는다면, 자바스크립트 엔진은 outer가 가리키는 바깥 렉시컬 환경으로 가서 값을 찾기 시작한다.
  3. 그래도 없을경우 계속 outer를 타고 가다가 전역 실행 컨텍스트의 렉시컬 환경을 와도 없다면 레퍼런스 에러를 내보낸다.

변수 섀도잉 - 동일한 식별자로 인해 상위 스코프에서 선언된 식별자의 값이 가려지는 현상
스코프 체인 - 식별자를 결정할 때 활용하는 스코프들의 연결 리스트

실행 컨텍스트

실행 컨텍스트는 코드를 실행하는데 필요한 환경을 제공하는 객체를 말한다.
(환경 = 코드 실행에 영향을 주는 조건이나 상태)

출처

우아한 테크톡 하루님 - 실행 컨텍스트

0개의 댓글