변수 let, const ,var
var는 한번 선언된 변수를 다시 선언 할 수 있다.
var name = "kevin";
console.log(name); // kevin
var name = "mike";
console.log(name); // Jane
하지만 let 같은 경우는
let name = "kevin";
console.log(name); //kevin
let name = "mike";
console.log(name); // error! << var와 let의 차이점 명확히 기억할것
var는 선언하기 전에 사용할 수 있다.
JavaScript에서 호이스팅(hoisting)이란, 인터프리터가 변수와 함수의 메모리 공간을 선언 전에 미리 할당하는 것을 의미합니다. var 로 선언한 변수의 경우 호이스팅 시 undefined 로 변수를 초기화합니다.
var name; // 호이스팅 (hoisting)
console.log(name) // undefined
name = "Mike"
undefined라고 나오는 이유는 선언은 호이스팅 되지만 할당은 호이스팅이 되지 않기 때문이다.
Temporal Dead Zone
console.log(name) //Temporal Dead Zone
const name = "Mike" // 함수 선언 및 할당
console.log(name) // 사용가능
let age =30;
function showAge(){
console.log(age)
let age = 20;
}
showAge();
호이스팅은 scope단위로 이루어 진다.
변수의 생성과정
var 1. 선언 및 초기화 단계
2. 할당 단계
let 1. 선언 단계
2. 초기화 단계
3. 할당 단계
const 1. 선언 +초기화 + 할당
let name;
name = 'Mike';
var age;
age = 30;
const gender; << SyntaxError: 선언과 할당이 동시에 이루어 지기 때문에 선언만 불가능
gender = 'male';
var = 함수 스코프
let , const = 블록 스코프 << 모든 코드 블록에서 선언된 변수는 내부에서만 사용 가능하며, 전역에서는 사용이 안된다.
const age = 30;
if(age>19){
var txt='성인';
}
console.log(txt); // '성인'
var로 선언되었기 때문에 전역에서 사용 가능하다.
하지만 함수에서는 유일하게 벗어 날수 없다.
var보다는 let과 const를 선호한다.