[3/28] 호이스팅과 TDZ, 매개변수와 인자의 차이점

hare·2023년 3월 28일
0

FE-기술면접

목록 보기
1/10

Hoisting 이란? TDZ란?

  • 호이스팅은 자바스크립트 엔진이 변수 선언을 다른 코드보다 가장 먼저 실행하는 고유의 특징을 통해 변수 선언문이 소스코드의 어느 곳의 위치하든지 간에 변수를 참조할 수 있게 되며 코드의 선두로 끌어올진 것처럼 동작하는 것을 말한다.
    • 변수 뿐만 아니라 함수, 클래스 등도 호이스팅된다. 모든 선언문은 런타임 이전 단계에서 먼저 실행되기 때문이다.
  • let 키워드로 선언한 변수는 선언 단계와 초기화 단계가 분리되어 진행되는데 런타임 이전에 js엔진에 의해 선언 단계가 먼저 실행되지만 초기화 단계는 변수 선언문에 도달했을 때에야 실행된다. 이는 var 키워드로 선언한 변수와 차이가 있다. var 키워드는 런타임 이전에 js엔진에 의해 두 단계가 한번에 진행되므로 변수 선언문 이전에 변수에 접근해도 스코프에 변수가 존재하기 때문에 참조 에러가 발생하지 않았던 것이다.
    • let 키워드 선언 변수는 스코프의 시작 지점부터 초기화 단계까지 변수를 참조할 수 없다. 이 구간을 일시적 사각지대 TDZ라고 한다.
    • var 키워드로 변수를 선언한 경우, 변수 선언과 초기화를 동시에 한 경우(let a=1) TDZ가 발생하지 않는다.
    • 호이스팅이 발생하지 않는 것처럼 보이지만 그렇지 않다. 만약 호이스팅이 발생하지 않는다면 전역 변수 1을 출력해야 하지만 let 키워드 선언 변수도 호이스팅이 있기 때문에 참조에러를 내뱉는다.
      let foo = 1;
      {
          console.log(foo) // ReferenceError
          let foo = 2;
      }

parameter와 argument의 차이에 대해 설명해주세요.

  • parameter는 함수를 정의할 때 함수 내부에서 사용될 변수의 이름이며 함수 호출 시 전달값으로 초기화된다.
  • argument는 함수를 호출할 때 함수에 전달되는 값이다. 함수 호출 시 parameter가 argument 값으로 초기화된다.
profile
해뜰날

0개의 댓글