본문 바로가기
자바스크립트 (JavaScript)/이론

변수, 호이스팅, TDZ (Temporal Dead Zone) 요약

by Hwanii_ 2023. 8. 20.
728x90

변수와 변수명

 

변수 == variable

하나의 값을 저장 하기 위해 확보된 메모리 공간 자체 / 변할 수 있는 데이터

 

변수명

메모리 공간을 식별 하기 위한 식별자

 

변수 선언 / 할당 / 초기화

 

변수 선언 

변수를 정의 하는 것을 의미 한다.

var, let, const 키워드를 사용 한다.

 

변수 할당

변수가 선언된 후 대입 연산자 (=) 를 통해 값을 넣어 주는 것을 의미 한다.

 

변수 초기화

변수를 선언함과 동시에 값을 넣어 주는 것을 의미 한다.

 

호이스팅 (Hoisting)

 

호이스팅

변수 선언 및 함수 선언이 된 변수 또는 함수에 대해,

코드가 이동 되지는 않지만,

코드가 최상위로 끌어 올려진 것 처럼 동작하는 현상을 말한다.

 

주의할점

선언이 끌어 올려지는 것 처럼 동작하는것 뿐이지,

할당이 끌어 올려지는 것이 아니다.

 

let 과 const 변수도 호이스팅이 가능 하지만,

일시적인 사각지대 == Temporal Dead Zone 에 빠지기 때문에,

변수 할당이 되기 전까지는 사용이 불가능 하다.

 

그래서 호이스팅이 되지 않는 것 처럼 보이지만,

호이스팅이 가능하지만,

TDZ 때문에 안되는 것 처럼 보이는 것 뿐이다.

 

스코프 (Scope)

 

식별자 (변수명, 함수명, 클래스명, .. 등) 의 유효 범위를 의미 한다.

 

전역 스코프 에서 사용 가능한 변수 == 전역 변수

지역 스코프에서 사용 가능한 변수 == 지역 변수

 

특정 코드 블록에서 사용 되는 변수 == 지역 변수 == 블록 레벨 스코프

 

다만,

var 키워드로 선언된 변수는,

함수의 코드 블록만들 지역 스코프로 인정 하는 예외를 갖게되서,

var 키워드로 선언된 변수만,

함수 레벨 스코프 라고 한다.

 

if 문, for 문, try-catch 문, .. 등에서 사용된 var 변수는,

함수 블록 내부에 아니므로,

지역 스코프가 아니라, 전역 변수로 취급 된다.

 

var : 함수 스코프 (function-scoped)

 

let & const : 블록 스코프 (block-scoped)

 

var / let / const

 

변수 중복 선언 재 할당 호이스팅 스코프 생성 과정
var 가능 가능 가능 함수 스코프 1.
선언

초기화

단계

2.
할당 단계
let 불가능 가능 가능 블록 스코프 1.
선언 단계

2.
초기화 단계

3.
할당 단계
const 불가능 불가능 가능 블록 스코프 1.
선언
+
초기화
+
할당
단계

 

따라서, var 변수는

1.

중복 선언으로 인해 예기치 못한 값의 반환 될 수 있다.

 

2.

함수가 아닌 다른 블록 스코프 에서 선언된 변수는,

모두 전역 변수로 취급 되어 예기치 못한 할당이 될 수 있다.

 

3.

선언 전에 변수를 참조 하면 undefined 가 될 수 있다.

 

위와 같이 3가지 문제가 발생 할 수 있으므로,

var 변수를 사용 하는 것을 지양하고,

let & const 변수를 사용 하는 것을 지향 해야 한다.

 

만약, 상수를 사용 해야 한다면, const 변수를 사용 하면 된다.

 

반응형