[JavaScript] 실행 컨텍스트

유영준·2022년 11월 6일
0
post-thumbnail

자바스크립트의 기본 개념동작 원리를 정확히 이해하는 것이 중요!


개인적인 공부를 하면서 중요한 내용을 정리한 형식이기 때문에 오류가 있을 수 있습니다.
피드백 주시면 정말 감사하겠습니다.


실행 컨텍스트의 역활

// 전역 변수 선언
const x = 1;
const y = 2;

// 함수 정의
function foo(a) {
  // 지역 변수 선언
  const x = 10;
  const y = 20;

  // 메서드 호출
  console.log(a + x + y); // 130
}

// 함수 호출
foo(100);

// 메서드 호출
console.log(x + y); // 3

실행 컨텍스트는 소스코드를 실행하는 데 필요한 환경을 제공하고 코드의 실행 결과를 실제로 관리하는 영역이다

const x = 1;

function foo () {
  const y = 2;

  function bar () {
    const z = 3;
    console.log(x + y + z);
  }
  bar();
}

foo(); // 6

렉시컬 환경은 식별자와 식별자에 바인딩된 값, 그리고 상위 스코프에 대한 참조를 기록하는 자료구조로 실행 컨텍스트를 구성하는 컴포넌트다

렉시컬 환경은 다음과 같이 두 개의 컴포넌트로 구성된다

1. 환경 레코드

  • 스코프에 포함된 식별자를 등록하고 등록된 식별자에 바인딩된 값을 관리하는 저장소다
  • 환경 레코드는 소스코드의 타입에 따라 관리하는 내용에 차이가 있다
  1. 외부 렉시컬 환경에 대한 참조
  • 외부 렉시컬 환경에 대한 참조는 상위 스코프를 가리킨다 이때 상위 스코프트란 외부 렉시컬 환경, 즉 해당 실행 컨텍스트를 생선한 소스코드를 포함하는 상위 코드의 렉시컬 환경을 말한다
  • 외부 렉시컬 환경에 대한 참조를 통해 단뱡향 링크드 리스트인 스코프 체인을 구현한다
let foo = 1; // 전역 변수

{
  // let, const 키워드로 선언한 변수가 호이스팅되지 않는다면 전역 변수를 참조해야 한다.
  // 하지만 let 키워드로 선언한 변수도 여전히 호이스팅이 발생하기 때문에 참조 에러(ReferenceError)가 발생한다.
  console.log(foo); // ReferenceError: Cannot access 'foo' before initialization
  let foo = 2; // 지역 변수
}
profile
프론트엔드 개발자 준비 중

0개의 댓글