var 중복 선언 가능, 재할당 가능, 함수레벨 스코프 var의 경우 전역 스코프나 호이스팅 문제 등이 있으므로 사용을 지양하는 것이 좋음
var name = "홍길동";
var name = "갑돌이"; // var은 중복 선언이 가능
console.log(name); // 갑돌이 출력
name = "손오공"; // "손오공"으로 재할당
console.log(name); // 손오공 출력
let 중복 선언 불가능, 재할당 가능, 블록레벨 스코프
let name = "홍길동";
let name = "갑돌이"; // let은 중복 선언이 불가능하여 에러 발생
let name = "홍길동";
console.log(name); // 홍길동 출력
name = "손오공"; // "손오공"으로 재할당
console.log(name); // 손오공 출력
const 중복 선언 불가능, 재할당 불가능, 블록레벨 스코프
const name = "홍길동";
const name = "갑돌이"; // const는 중복 선언이 불가능하여 에러 발생
const name = "홍길동";
console.log(name); // 홍길동 출력
name = "손오공"; // // const는 재할당이 불가능하여 에러 발생
변수나 함수의 유효 범위
변수나 함수가 어디에 선언되었는지에 따라 접근 가능 여부가 달라짐
크게 전역 레벨, 지역, 블록 3가지의 스코프로 구분할 수 있음
전역 스코프(Global Scope) 전역 스코프에서 선언된 변수와 함수는 코드의 어느 곳에서나 접근 가능하며 프로그램이 실행되는 동안 유효
let test = "전역 스코프"; // 전역 스코프
function put() {
// test가 전역스코프이므로 put 함수 내에서도 사용 가능
console.log(test);
}
put(); // 전역 스코프 출력
console.log(test); // 전역 스코프 출력
지역 스코프(Local Scope) 함수 내에서 선언된 변수와 함수는 해당 함수 내부에서만 유효하고, 함수가 실행될 때마다 새로운 스코프가 생성 함수 레벨 스코프 라고도 불림
function put() {
let test = "지역 스코프"; // 지역 스코프
console.log(test);
}
put(); // 함수 레벨 스코프 출력
console.log(test); // test는 지역 스코프 이므로
블록 레벨 스코프(Block Level Scope) 블록 스코프는 중괄호({})로 둘러싸인 범위를 의미하고, let과 const 키워드로 선언된 변수가 블록 레벨 스토프를 가짐
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); // 에러