호이스팅과 TDZ

seungbox·2023년 5월 31일
1

기술면접

목록 보기
1/3

호이스팅

  • 변수 : 변수는 하나의 값을 저장하기 위해 확보된 메모리 공간 or 그 공간을 식별하기 위해 붙인 이름
  • 식별자 : 변수의 이름 ... => 값이 아닌 메모리 주소를 기억함

호이스팅?

  • 코드를 실행하기 전에 선언된 변수 및 함수를 해당 범위의 맨 위로 이동하는 JavaScript의 메커니즘
    -> 모든 선언문은 런타임 이전에 실행 되기 때문, 실제 코드 라인이 변경되거나 하는 건 아님

var, let, const

  • var 키워드로 선언된 변수는 선언 단계와 초기화 단계가 한번에 이루어진다.
    즉, 스코프에 변수를 등록하고, 등록된 변수에 메모리를 할당하고 undefined로 초기화 하는 것이 동시에 일어남
  • let과 const 또한 var과 동일하게 hoisting이 된다. 하지만 대부분 let과 const는 호이스팅이 발생하지
    않는 다고 느낌
    => TDZ의 제약을 받기 때문

TDZ란?

  • TDZ: Temporal Dead Zone (일시적 사각지대)
  • 변수에 담길 값을 위한 공간이 메모리에 할당되지 않은 상태
    let 키워드로 선언한 변수는 스코프의 시작 지점부터 초기화 단계 시작 지점까지 변수를 참조할 수 없다.
    이 구간을 TDZ라고 부른다
console.log(foo) // RefeneceError : foo is not defined

let foo; // 변수 선언문에서 초기화 단계가 실행
console.log(foo); // undefined

foo = 1; // 할당문에서 할당 단계가 시행
console.log(foo); // 1
실행 컨텍스트가 생성될때 let/const 변수는 lexical Environment에 저장됨
그래서 초기화(값 바인딩) 되기 전에는 접근할 수 없는 TDZ 상태에 있게 됨
반면에 var 변수는 Variable Environment에 따로 저장=> TDZ에 영향을 받지 않음

parameter 와 argument

parameter 란? (매개변수)

  • 메서드 선언부에서 정의한 변수
  • 함수 등 서브루틴의 input 으로 제공되는 여러 데이터 중 하나를 가리키기 위해 사용되는 변수의 한 종류
    • 서브루틴 : 하나 이상의 장소에서 필요할 때마다 반복해서 사용할 수 있는 부분적 프로그램
    • 함수 내부의 각 값이 어떤 역할을 할지 정의

argument 란?(전달인자)

  • 메서드 호출부에서 전달하는 값
  • 프로그램, 서브루틴, 함수간 전달되는 값 or 주소값
profile
함께 하는 개발자

0개의 댓글