let name; // undefined
let result = false;
const sum = 5 + 10;
//블럭
{
//
const name = "mark";
consol.log(name)
}
consol.log(name); //오류! name은 블럭 안에 정의되었으므로 밖에서 name 을 사용할 수 없다.
//밖에서 안으로
let age = 37;
{
age++
console.log(age);
}
console.log(age); //문제없이 출력됨.
var a = 0;
(function(){
a++;
console.log(a);
})();
console.log(a);
(function() {
var b = 0;
console.log(b);
})();
b++
console.log(b); // 오류 발생 b가 정의되지 않음
var c = 0;
{
c++;
console.log(c);
}
{
var d = 0;
console.log(d);
}
console.log(d);
위의 경우 맨 마지막 줄의 console.log(d)는 오류가 발생하지 않고 제대로 출력이된다.
var는 함수 스코프만큼의 유효 범위를 가지고 있지만 위의 구문에선 {} 밖에 없고 함수가 정의되어있지 않은 상태이므로 {}안에서 정의를 해서 바깥에서 변수를 호출해도 오류가 발생하지 않는것!
let, const => 블록안에서 정의된 경우, 그 블록 안에서만 유효하다
var => 블록이 몇개가 있던 함수 내부에 정의된 경우엔 그 함수 안에서 유효하다.