모든 변수는 선언된 위치에 의해 스코프를 갖게된다.
전역에서 선언된 변수는 전역 스코프이고, 지역(함수, 반복문, 조건문 등)에서 선언된 변수는 지역 스코프를 갖는다.
for (let i = 0; i < 5; i++) {
console.log(i); // 1, 2, 3, 4, 5
}
console.log(i) // ReferenceError
블록 스코프 안에서 let으로 선언된 변수 i는 블록 범위를 벗어나면 접근할 수 없다.
for (var i = 0; i < 5; i++) {
console.log(i); // 1, 2, 3, 4, 5
}
console.log(i) // 5
하지만 var로 선언된 변수는 블록 밖에서도 접근할 수 있다.
var 를 사용하여 선언된 변수는 함수 스코프만 따르기 때문이다. (화살표 함수 제외)
전역 변수의 사용은 변수 이름이 중복될 수 있고, 의도치 않은 재할당에 의한 상태 변화로 코드를 예측하기 어렵게 만드므로 사용을 억제해야 한다.
또한 변수를 var로 선언하기 보다는, const 와 let 을 사용하는게 권장된다.