[2주차] 스코프, 호이스팅, TDZ 개념 정리

aekyoung kwon·2022년 11월 18일
0

스코프(Scope)란
'범위'라는 뜻을 가지고 있는데 즉 '변수에 접근할 수 있는 범위'라고 한다.
2가지의 타입이 있는데 전역변수와 지역변수가 있다.

호이스팅(hoisting)이란
스코프 내부 어디서든 변수 선언은 최상위에 선언된 것 처럼 행동한다.
인터프리터가 변수와 함수의 메모리 공간을 선언 전에 미리 할당하는 것을 의미합니다.

TDZ(Temporal Dead Zone)
let, const는 TDZ의 영향을 받는다.

변수의 생성과정
1. 선언단계
2. 초기화단계 (undefined)를 할당 해주는 단계
3. 할당단계

  • var (함수 스코프 : function-scoped)
console.loge(name) //undefined
var name = 'jam' //할당
  1. 선언 및 초기화 단계
  2. 할당 단계
    //선언은 호이스팅이 되지만 할당은 호이스팅이 되지 않는다.
  • let (블록 스코프 : block-scoped)
console.loge(name)  // ReferenceError
let name = 'jam' 
  1. 선언단계
  2. 초기화단계
  3. 할당단계
    // 호이스팅 되면서 선언단계가 이루어지지만 초기화단계가 분리되어서 진행된다.
  • const (블록 스코프 : block-scoped)
console.loge(name)  // TDZ 
const name = 'jam' // 함수 선언 및 할당 
console.loge(name) // 사용 가능
  1. 선언단계 + 초기화단계 + 할당단계 // 한번에 일어난다.
  • var (함수 스코프 : function-scoped)
    : 함수 내에서 사용하면 지역변수로 함수 내에서만 사용할 수 있다.
    : 유일하게 벗어날 수 없는 스코프가 함수 스코프이다.
  • let,const (블록 스코프 : block-scoped)
    : 함수, if문, for문, while문, try/catch문 등
    : if {중괄호} 내부 (지역변수)에서만 사용 가능하다.
    : 코드 블록 내부에서만 사용한다.
profile
멍텅구리

0개의 댓글