변수의 접근성과 생존 기간을 제어하는 유효범위
이름이 충돌하는 문제를 덜어주고 자동으로 메모리를 관리한다.
var val = 'hello';
function test () {
var val = 'world';
console.log(val);
}
test(); // 'world'(test함수 내에서만 참조 가능)
console.log(val); // 'hello'(전역에 선언되었기 때문에 어디서든 참조 가능)
function test() {
val = "hello";
var val2 = "world";
}
test()
console.log(val2) // ReferenceError: val2 is not defined(test 함수 내에서만 유효함)
console.log(val) // "hello"(선언되지 않은 변수이기 때문)
if(true) {
var value = "hello";
}
console.log(value); // "hello"
if(true) {
let value = "world";
}
console.log(value); // "hello"(let 키워드를 사용했기 때문에 중괄호 안에서만 존재하는 변수임)