📋 Var
var age = 25;
age = 30;
📋 Let
let age = 25;
age = 30;
📌 위 두 코드는 같은거 같지만 다릅니다.
Var 와 Let의 차이점은 3가지 정도 있다고 한다.
- 변수의 스코프 ( Scope )
- 변수의 중복 선언 ( Variable redeclaration )
- 변수의 호이스팅 ( Hoisting )
스코프란?
- 스코프란 범위라는 뜻입니다.
- 자바스크립트에서 범위란 코드가 변수에 접근할 수 있는 범위를 뜻함.
- 스코프의 종류는 3가지 정도 있습니다.
- Function Scope === Var로 선언 시
- Block Scope === Let으로 선언 시
- Global Scope === 전역 범위
코드로 보는 Function Scope
# 1
function main() {
var x = 'hi';
}
console.log(x); // ReferenceError
// 함수 스코프는 변수가 선언된 함수 내에서만 변수에 접근이 가능하다.
# 2
function main() {
if (true) {
var x = 'hi';
}
console.log(x);
}
main(); // 실행되지 않아야할 hi가 출력됨
// 그 이유는 var 키워드를 사용한 변수는 자동으로 함수 스코프를 가지고 있기 때문.
# 3
function main() {
if (true) {
let x = 'hi';
}
console.log(x);
}
main(); // let으로 변경 시 참조 오류가 발생한다.
# 4
function main() {
if (true) {
let x = 'hi';
console.log(x);
}
}
main(); // hi가 출력된다.
// 그 이유는 let키워드는 사용시 변수가 사용된 내에서만 참조 가능하다.
// 블록 스코프로 지정이 되어서다.