Scope란, 변수가 어디까지 쓰일 수 있는지의 범위를 의미한다.
문제를 풀다가 undefined라는 에러메시지가 많이 나왔었다.
그건 변수가 선언되지 않았다는 뜻인데, 선언을 하였어도 변수를 선언한 영역에(block) 접근할 수 가 없어서 컴퓨터가 변수가 선언되었다는 사실을 알지 못해 그런것이다.
변수에는 어느 위치에서든 쓸 수 있는 변수가 있고, 특정 부분(함수, for,if등)에서만 쓰일 수 있는 변수가 있다.
Block : 중괄호({}, curly brace)로 감싸진 부분
어떤 종류가 있냐하면?
function, if, for문 등이 있는데, 아래를 보면
function hi() {
return 'i am block';
}
{}(block)로 감싸진 것을 볼 수 있다.function의 내부는 하나의 block이다.
Global(전역) Scope : block밖인 global scope에서 만든 변수
Scope의 오염
global변수는 어디서든 접근하기 쉬워서 좋다. 하지만 장점이 있는 만큼 , 단점들이 있다.
global변수를 선언하면, 해당 프로그램의 어디에서나 사용할 수 있는 global namespace를 갖는다.
namespace : 변수 이름을 사용할 수 있는 범위라는 뜻
global변수는 프로그램이 종료될때까지 계속 살아잇어 변수값이 계속 변한다면 해당 변수를 트래킹 하기도 어렵고, 변수가 어디에서 왜 필요한지를 선언한 곳을 다 찾아 다녀야 한다.
그렇기 때문에 global변수를 남용하는 것을 주의해야한다.
어떻게 해야 좋을까?