스코프는 변수에 접근하거나 참조할 수 있는 위치를 정의하는 것을 말한다.
일부 변수는 프로그램의 어디에서나 접근할 수 있지만, 어떤 변수는 특정 상황에서만 사용할 수 있다.
좋은 Scoping 습관은 변수들은 block scope으로 최대한 나눠놔야 한다.
(global 변수가 여기저기서 수정되면 안되기 때문에)
: 변수가 전역 범위에서 선언된 경우 Global Scope
라고 한다.
Global Scope는 블록 내부에 바인딩되어 있지 않아 어떤 블록에서도 접근이 가능하다.
이렇게 선언된 변수를 전역 변수
라고 한다.
var color = 'blue'
var returnSkyColor = () => {
return color;
};
console.log(returnSkyColor()); // blue
: 블록 내부에 선언된 경우 Local scope
라고 한다.
내부에서만 사용이 가능한 변수를 지역 변수
라고 한다.
var color = 'blue'
var returnSkyColor = () => {
var color = 'red'
return color;
};
console.log(returnSkyColor()); // red
: 함수 내부의 지역 변수에서 var
이 아닌 let과 const
로 변수를 선언할 경우, 이 변수는 함수 내부에서만 사용할 수 있다.
const functionColor = () => {
const color = 'red'
}
console.log(color()); // output: ReferenceError
: 브라켓 {}
내부에서 선언된 변수는 내부에서만 사용이 가능하다.
{
const hello = 'Hello!'
console.log(hello) // 'Hello!'
}
console.log(hello) // output: ReferenceError
ReferenceError
가 난다.: 변수에 항상 접근할 수 있게 하는 것은 좋아보일 수 있지만, 너무 많은 글로벌 스코프는 에러가 날 확률이 높아진다.
let num = 50;
const logNum = () => {
num = 100; // Take note of this line of code
console.log(num);
};
logNum(); // Prints 100
console.log(num); // Prints 100
num
이라는 변수는 글로벌 스코프를 가졌다.num
이 접근할 수 있기 때문에 num이 새로운 값으로 할당된다.: 함수는 호출된 시점이 아닌 선언된 시점에서 유효범위를 가진다.
var i = 5;
function a(){
var i = 10;
b();
}
function b(){
document.write(i);
}
a();