var name = 'rk';
console.log(name); //결과값: rk
var name = 'hong';
console.log(name); //결과값: hong
let name = 'rk';
console.log(name); //결과값: rk
let name = 'hong';
console.log(name); //결과값: Uncaught SyntaxError: Identifier 'name' has already been declared
name = 'rkhong';
console.log(name); //결과값: rkhong
const name = 'rk';
console.log(name); //결과값: rk
const name = 'hong';
console.log(name); //결과값: Uncaught SyntaxError: Identifier 'name' has already been declared
name = 'rkhong';
console.log(name); //결과값: Uncaught TypeError: Assignment to constant variable.
// 스코프의 선두에서 선언 단계와 초기화 단계가 실행됨
// 따라서 변수 선언문 이전에 변수를 참조할 수 있음
console.log(name); //결과값: undefined
var name;
console.log(name); //결과값: undefined
// 할당문에서 할당 단계가 실행됨
name = 'rk';
console.log(name); //결과값: rk
// 스코프의 선두에서 선언 단계가 실행됨
// 아직 변수가 초기화(메모리 공간 확보와 undefined로 초기화)되지 않았음
// 따라서 변수 선언문 이전에 변수를 참조할 수 없음
console.log(name); //결과값: ReferenceError: foo is not defined
// 변수 선언문에서 초기화 단계가 실행ehla
let name;
console.log(name); //결과값: undefined
// 할당문에서 할당 단계가 실행됨
name = 'rk';
console.log(name); //결과값: rk
.
.
.
.
참고
https://velog.io/@bathingape/JavaScript-var-let-const-%EC%B0%A8%EC%9D%B4%EC%A0%90
https://210one2.tistory.com/368
https://hanamon.kr/javascript-%ED%98%B8%EC%9D%B4%EC%8A%A4%ED%8C%85%EC%9D%B4%EB%9E%80-hoisting/