var num1 = 1; // 최초 선언
var num1 = 2; // 중복 선언
num1 = 3; // 재할당
let num2 = 2;
// let num2 = 3; 중복선언 x
num2 = 5; // 재할당
const NUM = 3;
// const NUM = 5; 중복 선언 x
// NUM = 4; 재할당 x
let test = "전역 스코프"; // 전역 스코프
function put() {
// test가 전역스코프이므로 put 함수 내에서도 사용 가능
console.log(test);
}
put(); // 전역 스코프 출력
console.log(test); // 전역 스코프 출력
function put() {
let test = "지역 스코프"; // 지역 스코프
console.log(test);
}
put(); // 함수 레벨 스코프 출력
console.log(test); // test는 지역 스코프 이므로
if(true) {
var test_var = "var";
let test_let = "let";
const TEST_CONST = "const";
}
// var는 함수 레벨 스코프이므로 사용 가능
console.log(test_var); // "var" 출력
// let와 const는 블록 레벨 스코프 이므로 에러 발생
console.log(test_let); // 에러
console.log(TEST_CONST); // 에러
// var의 호이스팅 문제
console.log(test); // undefined 출력
test = "aaa";
console.log(test); // "aaa" 출력
var test;
let와 const의 경우 이런 호이스팅의 문제를 발생시키지 않고, 선언되지 않은 변수가 사용 될때 참조 에러를 발생 시킴
console.log(test); // 참조 에러 발생으로 프로그램 종료
test = "aaa";
console.log(test);
let test;
데이터 타입 | 값 |
---|---|
number | 숫자 |
string | 문자열 |
boolean | 논리(true OR false) |
null | 존재하지 않는 값 |
undefined | 값이 할당 되지 않은 상태 |
Symbol | 고유하고 변경 불가능한 값 |
Object | 여러 개의 키-값 쌍으로 이루어진 복합 데이터 타입(객체) |