스코프
스코프(Scope)
스코프[1]는 변수의 유효 범위
로 정의할 수 있다.
스코프는 함수, 또는 중괄호(Curly bracket)에 의해 나뉜다.
스코프를 다중으로 선언한다면,
바깥쪽 스코프에서 선언한 변수는 안쪽 스코프에서 사용 가능하다.
반대의 경우, 사용할 수 없다.
가장 바깥쪽의 스코프는 전역 스코프(Global scope)라고 부르고, 블록으로 구분된 스코프는 지역 스코프(Local scope)로 부른다.
여기서 지역 스코프와 전역 스코프에서 선언한 각각의 변수를 지역 변수, 전역 변수라고 하며, 이 두 변수의 우선순위는 지역 변수가 더 높다.
예를 들면 전역 변수에 a
라는 변수를 선언하고, 지역 변수에 같은 a
라는 이름을 가진 변수를 선언한다면, 그 지역 스코프에선 지역 변수에 선언된 a
를 사용한다.
동일한 변수 이름으로 바깥쪽 변수가 안쪽 변수에 의해 가려지는 현상을 쉐도잉(Variable Shadowing)이라 부른다.
지역 스코프는 블록 스코프, 함수 스코프로 구분된다.
블록 스코프는 중괄호(Curly bracket)를 기준으로 범위가 구분된다.
함수 스코프는 function
키워드가 존재하는 함수 선언식 및 함수 표현식이다.
일반적으로, 스코프를 구분할 땐 블록 단위로 구분한다. 블록 단위의 스코프가 더 예측 가능하고, 협업에서 혼란을 예방할 수 있기 때문이다.
우리가 변수를 선언할 때, let
, const
, var
이렇게 세가지 키워드를 사용한다.
여기서 const
는 변하지 않는 값, 즉 상수(constant)를 정의할 때 쓰는 키워드이다. 이 키워드로 선언한 변수의 값은 재할당이 불가능하다.
나머지 let
과 var
은 큰 차이가 있다.
let
으로 선언한 변수의 유효 범위는 블록이다.
var
으로 선언한 변수의 유효 범위는 함수이다. 블록 스코프를 무시한다.
즉, 어떤 블록 내에서 var
키워드로 변수를 선언했다 하더라도 다른 블록에서 그 변수를 재사용할 수 있다.
이 경우 코드 작성에 있어서 혼란스러울 수 있고, 버그를 유발할 수 있다.
그렇기 때문에 const
로 변수를 선언할 때 이외에, 변수를 선언할 땐 let
키워드로 선언하는 것이 코드 작성에 있어서 안전하다.
Notes
[1]컴퓨터 프로그래밍에서 변수 영역(Scope)은 변수가 유효성을 갖는 영역을 가리킨다.