호이스팅 :
스코프 내부 어디서든 변수 선언은 최상위에 선언된 것 처럼 행동
Temporal Dead Zone(TDZ)
TDZ 시맨틱은 선언전에 변수에 접근하는 것을 금지한다. (변수 선언 전에 사용하지 않는다)
TDZ에 영향을 받는 구문으로
const, let, class, constructor() 내부의 super() : super()를 호출전 까지 this바인딩은 TDZ존에 있다, 기본 함수 매개변수,
var 는 선언하기 전에 사용할 수 있다.
Hoisting에 의해 선언이 먼저된다. 그래서 undefined 되며,
선언된 값은 호이스팅이 되지 않는다.
typeof 연산자는 변수가 현재 스코프 안에 선언되었는지 확인할 때 유용하다.
예를 들어서, 변수가 선언되지 않은 상태에서 typeof notDefined; 를 하면 undefined가 발생하지만,
TDZ존에서 typeof 연산자를 사용하면 ReferenceError가 발생한다.
선언단계
초기화단계
할당단계
var
1. 선언 및 초기화 단계
2. 초기화 단계
let
1. 선언단계
2. 초기화 단계 (실제 코드에 도달했을때 진행됨)
const
1. 선언 + 초기화 + 할당
var : 함수 스코프(function-scoped)
let, const : 블록 스코프(block-scoped) {함수, if문, for문, while문, try-catch문 등}
--> 블록 스코프 안에서만 사용이 가능
function add(){
// Blocked - lebel Scope
}
if(){
// Blocked - lebel Scope
}
for(){
// Blocked - lebel Scope
}
const age = 30;
if(age>19){
var txt = '성인';
}
console.log(txt); //성인
하지만 var도
함수안에서 선언 되는것은 함수내에서만 사용할 수 있다.
'dev > Javascript' 카테고리의 다른 글
[Javascript] 2차원 배열 2048 게임 (0) | 2022.04.01 |
---|---|
[Javascript] DOM (0) | 2022.03.27 |
[Javascript] 2차원배열 (0) | 2022.03.25 |
[Javascript] .map (0) | 2022.03.10 |
[Javascript] Javascript 기본 (0) | 2022.02.04 |