반응형

📝var vs let vs const (호이스팅, TDZ)

 

진행하기 전에 호이스팅 및 TDZ라는 개념을 알아야하는데 호이스팅이란 스코프 단위로 선언한 변수를 최상위로 올리는 단계를 의미하고 TDZ(Temproal Dead Zone)의 경우 값을 사용할 수 없는 영역이라고 생각하면 된다.

 

각 변수 타입에 따른 값 할당에 대한 단계가 존재한다

 

var 변수 (호이스팅 작동)

  1. 선언 및 초기화 단계 [var name = 'Mike'을 읽고 var name;으로 호이스팅 시켜 선언 및 초기화(undefined) 작업]
  2. 할당 단계 [var name = 'Mike' 실행 단계에 오면 호이스팅 시킨 변수에 값을 할당한다]
console.log(name); //undefined [호이스팅으로 사용 가능]

var name = 'Mike'
console.log(name); // Mike
var name = 'Bob'   // 이런식으로 재할당 가능
console.log(name); // Bob

/** ----- var는 블록 스코프 밖에서도 사용 가능 ----- **/
const age = 30;

if(age > 19){
    var txt = '성인';
}

console.log(txt); // 성인

또한 var name = 'Bob'으로 재할당이 가능하다 이로 인해 일반적으로 작동하는 프로그래밍 단계에서 이상한 현상이 발견 될 수 있고 또한 var는 블록스코프 내에서 선언한 것도 cosnt와 let하고 다르게 사용이 가능하기 때문에 생각한대로 프로그램 로직이 안 돌 수 있기 때문에 var 사용을 지양한다 [다만 함수 스코프 내에서는 밖에서 사용 불가능]

 

 

let변수 (호이스팅 작동 + TDZ에 선언)

  1. 선언 단계     [let name = "Mike"를 읽고 let name;으로 호이스팅 시키지만 TDZ에 선언 되어 사용 불가]
  2. 초기화 단계 [let name = "Mike" 실행 단계에 오면 호이스팅 시킨 변수에 undefined으로 초기화]
  3. 할당 단계     ['Mike'라는 값을 할당하게 된다]
console.log(name); // Error 발생 (TDZ에 선언 되어서 사용 불가)
let age;

let name = "Mike";
let name = "Bob";  // Error 발생 (Identifier 'name' has already been declared)

 

 

const 변수 (호이스팅 작동 + TDZ에 선언)

  1. 선언 + 초기화 + 할당 [const name = "Mike"를 읽고 호이스팅 후 TDZ에 선언한다]
console.log(name); // Error (Cannot access 'name' before initialization)
const name = "Mike";

name = "Bob";      // Error (Assignment to constant variable)

const age;         // Error 반드시 선언 즉시 값 할당 필요

 

📝null

null이라는 값이 할당된 경우

 

📝undefined

선언은 되었지만 아무런 값도 할당되지 않은 경우

 

📝NaN

경우 문자를 숫자로 나누려는 등의 행동

 

📝지역 변수, 전역변수

function car(){
	var carName = "matiz";
}
console.log(carName); // 에러 carName이 지역변수이기 때문에

var carName ="matiz";
console.log(carName); // matize 전역변수를 호출했기 때문에 가능하다.

// 지역변수 전역변수

지역변수란 그 지역에서만 쓸 수 있는 걸로 function car(){ var carName ="matize } carName이 function안에

선언되어있죠? 이처럼 한정된 중괄호 지역에서 쓸 수 있는 게 지역변수 입니다. 그리고 어디서나 쓸 수 있는게 전역변수입니다.

 

 

 

 

🔗 참고 및 출처

https://www.youtube.com/watch?v=ocGc-AmWSnQ&list=PLZKTXPmaJk8JZ2NAC538UzhY_UNqMdZB4

반응형