본문 바로가기

프로그래밍지식/javascript

나를 위한 자바스크립트 개념 - Scope(스코프)

 

스코프란?

 

스코프란 말그대로 범위이다. 식별자 쉽게 말해 변수들을 검색하는 규칙이라고 이해하면 될것같다.  스코프를 통해서 변수들은

다른 코드나 함수들이 자신을 불러들일 수 있는 범위를 결정하게 된다.

1
2
3
4
5
6
7
8
9
const x = 'global X';
 
function foo() { 
  const x = 'inner X';
  console.log(x);
}
 
foo();  //inner X
console.log(x); //global X 
cs

 

스코프의종류

전역스코프와 지역스코프가 있다. 전역스코프는 스코프전체에서 쓰이는 스코프이다. 위의 예제에서 global X가 들어있는 식별자 x는

전역스코프에 쓰여져있다. foo함수내에 선언된 x의 경우에는 지역스코프에 쓰여져있다. 전역스코프에 쓰여진것은 어디에서든 참조 할 수있다. 하지만 지역스코프에 쓰여진 변수는 오직 지역에서만 참조할 수있다.

 

스코프체인

 

스코프체인은 말그대로 스코프의 계층을 말하는것이다. 유효범위에서도 우선순위라는게 있다. 지역스코프에서 쓰여진 변수는 지역스코프에서만 참조할 수있다. 하지만 만약 참조하는 변수가 지역스코프안에없다면 그다음에는 전역스코프안에있는 변수를 찾게된다.

 

블록레벨 스코프

 

스코프는 모든 문안에서 지역스코프를 만든다. 예를들면 if/for/try/catch문뿐 아니라 함수문까지도 말이다. 이러한 특성을 바로 블록레벨스코프라고한다.

 

함수레벨 스코프

 

var같은 식별자 경우에는 오직 함수 범위만을 지역스코프로 인정한다. 이걸 함수레벨 스코프라고한다.  if문이나try/catch문 이런 문법들안에서는 인정하지 않는다. 이런 문제로 인해서 let,const같은 식별자가 생겨났는데 이건 나중에 더자세히 설명하겠다.

 

렉시컬스코프

 

스코프는 호출하는 당시에 유동적으로 결정될수도 있고 호출했을떄 이미 스코프가 결정되어있을 수 도 있다. 보통의 프로그래밍언어나, 자바스크립트는 정적스코프이다. 즉 스코프는 이미 정해져있기때문에 함수가 어디에서 호출 되는냐가 중요한게 아니라, 어디에 정의 되어있는게 가장 중요하다.

 

 

 

'프로그래밍지식 > javascript' 카테고리의 다른 글

var 대신에 let,const를 사용하는이유  (0) 2023.08.23