본문 바로가기
dev/Javascript

[JavaScript] 자바스크립트 기초2

by dev_Step 2022. 2. 9.

호이스팅 :

스코프 내부 어디서든 변수 선언은 최상위에 선언된 것 처럼 행동

 

Temporal Dead Zone(TDZ)

TDZ 시맨틱은 선언전에 변수에 접근하는 것을 금지한다. (변수 선언 전에 사용하지 않는다)

 

TDZ에 영향을 받는 구문으로

const, let, class, constructor() 내부의 super() : super()를 호출전 까지 this바인딩은 TDZ존에 있다, 기본 함수 매개변수,

var 는 선언하기 전에 사용할 수 있다.

Hoisting에 의해 선언이 먼저된다. 그래서 undefined 되며, 

선언된 값은 호이스팅이 되지 않는다.

 

typeof 연산자는 변수가 현재 스코프 안에 선언되었는지 확인할 때 유용하다.

예를 들어서, 변수가 선언되지 않은 상태에서 typeof notDefined; 를 하면 undefined가 발생하지만,

TDZ존에서 typeof 연산자를 사용하면 ReferenceError가 발생한다.

 

undefined

 

 

TDZ에서 typeof 사용시 에러

선언단계

초기화단계

할당단계

 

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사용시 블럭안에서 선언 및 초기화 할당을 진행해도 블럭 밖에서 사용가능

 

if안에서 let, const로 선언시 블럭 밖에서 사용불가능

 

하지만 var도 

함수안에서 선언 되는것은 함수내에서만 사용할 수 있다.

함수 내부에서 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