변수, 상수, 자료형 그리고 메모리

변수

호이스팅(Hoisting)

var는 호이스팅 때문에 사용 권장하지 않음

호이스팅 : 인터프리터가 변수와 함수의 메모리 공간을 선언 전에 미리 할당하는것을 의미

var로 선언한 경우 호이스팅 시 undefined로 초기화

let,const의 경우 호이스팅 시 변수를 초기화 하지 않음.( 초기화 되어있지 않을때 호출하면 ReferenceError) 초기화를 제외한 선언만 호이스팅

console.log(num); // var 선언으로 undefined 출력됨
var num;
num = 7;
-----------------------------------------------
console.log(num); // 초기화가 되어있지 않기 때문에 ReferenceError
let num = 7;

let 에는 TDZ(Temporal Dead Zone) 일시적 사각지대가 존재한다.

변수 스코프의 맨 위에서 변수의 초기화 완료 시점 까지의 변수는 “TDZ”에 들어간 변수라 표현한다.

console.log(bar); //undefined
console.log(foo); // ReferenceError -> TDZ에 들어가있음
var bar = 0;
let foo = 0;
----------------------------------------------------
//TDZ는 스코프 맨 위에서부터 시작
const func = () => console.log(value);
//TDZ 안에서 value에 접근하면 ReferenceError
let value = 3; //TDZ 종료
func();//TDZ 밖에서 호출
----------------------------------------------------
function func(){
	var val = 1;
	if(val){
		let val = (val +1); // ReferenceError
		//(val + 1)에서의 val은 let으로 아직 초기화가 되어있지 않기때문에 ReferenceError 발생
	}
}
func();

상수

자료형

메모리

할당 → 사용 → 해제