var
// var 변수의 호이스팅
console.log(name); // undefined
var name = 'Mike';
/*
실제로는
var name;
console.log(name); // undefined
name = 'Mike';
와 같이 동작함
*/
let
console.log(name); // ReferenceError
let name = 'Mike';
let은 에러 발생
호이스팅
let age = 10;
funtcion showAge(){
console.log(age);
let age = 20;
}
showAge(); // error!
TDZ (Temporal Dead Zone)
TDZ
TDZ장점
- 선언
- 초기화 (변수 선언 후 처음으로 값을 저장하는 것. 이 단계에서 할당된 메모리는 undefined로 초기화됨)
- 할당
var, let희 호이스팅 차이
var : 함수 스코프 (function-scoped)
let, const : 블록 스코프 (block-scoped)
함수 스코프 : 함수 내에서 선언된 변수만 지역 변수가 됨.
블록 스코프 : 코드블록 내에서 선언된 변수는 코드블록 내에서만 유효하며, 외부에서 사용할 수 없음.
// 블록 스코프
const age = 30;
if (age>19){
var txt = '성인입니다.';
let isAdult = true;
}
console.log(txt); // '성인입니다.'
console.log(isAdult); // error
// 함수 스코프
function add(num1, num2){
var resule = num1 + num2;
}
add(2,3);
console.log(result); // error. result is not defined