스코프(Scope)란
'범위'라는 뜻을 가지고 있는데 즉 '변수에 접근할 수 있는 범위'라고 한다.
2가지의 타입이 있는데 전역변수와 지역변수가 있다.
호이스팅(hoisting)이란
스코프 내부 어디서든 변수 선언은 최상위에 선언된 것 처럼 행동한다.
인터프리터가 변수와 함수의 메모리 공간을 선언 전에 미리 할당하는 것을 의미합니다.
TDZ(Temporal Dead Zone)
let, const는 TDZ의 영향을 받는다.
변수의 생성과정
1. 선언단계
2. 초기화단계 (undefined)를 할당 해주는 단계
3. 할당단계
console.loge(name) //undefined
var name = 'jam' //할당
console.loge(name) // ReferenceError
let name = 'jam'
console.loge(name) // TDZ
const name = 'jam' // 함수 선언 및 할당
console.loge(name) // 사용 가능
- var (함수 스코프 : function-scoped)
: 함수 내에서 사용하면 지역변수로 함수 내에서만 사용할 수 있다.
: 유일하게 벗어날 수 없는 스코프가 함수 스코프이다.- let,const (블록 스코프 : block-scoped)
: 함수, if문, for문, while문, try/catch문 등
: if {중괄호} 내부 (지역변수)에서만 사용 가능하다.
: 코드 블록 내부에서만 사용한다.