6. 스코프(Scope)

2020. 4. 18. 21:29
반응형

한 줄 정의 : 너의 variable이 존재하는가, 그렇지 않은가.

 

variable은 큰 곳에서 작은 곳으로는 접근할 수 있다. 작은 곳에서 큰 곳으로는 접근할 수 없다.

아래 예시를 살펴보자.

 

괄호 안에서 선언한 변수 a는 그 안에서만 유효하다.

위 예시와 같이 괄호 바깥에서 a를 호출하려고 했을 경우 에러를 출력한다.

 

변수 b를 전역변수로 선언한 경우, 괄호 안에서도 호출할 수 있다.

 

 

그렇다면 변수를 모든 곳에서 사용할 수 있으면 편리하지 않은가? 라고 생각할 수 있다.

변수를 모든 곳에서 사용할 수 있게 하는 걸 지양해야 하는 이유가 있다.

(왜 var 대신 const, let을 사용해야 하는가?)

 

1. 코드에 일정 수준의 보안을 제공한다.

컴퓨터 보안의 일반적인 원칙은 ‘한 번 실행할 때 사용자는 필요한 항목에만 접근할 수 있다’는 것이다(최소 액세스 원칙).

 

2. 어떤 변수를 코드 모든 곳에서 사용할 수 있는 경우 디버깅이 어려워진다.

다른 곳에서 const let 이용해서 같은 이름의 변수를 선언했을 경우 에러를 발생시키고, var 이용해서 같은 이름의 변수를 선언했을 경우  번째 값이  번째 값을 덮어써서 재선언된다.  경우에는 디버깅이 어렵다.

 


 

1. 전역 스코프(Global Scope)

어디에서나 접근하고 변경할 수 있는 것.

변수가 괄호 바깥에 선언되었을 때와 같다.

함수를 포함한 모든 곳에서 변수를 사용할 수 있게 된다.

 

 

2. 지역 스코프(Local Scope)

코드의 특정 부분에서만 사용할 수 있는 것.

함수 스코프(Function Scope) / 블록 스코프(Block Scope)로 나뉜다.

 

2-1. 블록 스코프

어떤 변수가 중괄호{ } 안에만 존재한다면, 괄호 밖에서는 존재하지 않는다.

즉, 중괄호 외부에서는 접근할 수 없다.

let과 const를 사용하자. 이 둘은 모두 블록 스코프(block scope)다.

 

2-2. 함수 스코프

어떤 함수 안에 변수를 선언했다면, 변수는 이 안에서만 존재한다.

함수는 서로의 스코프에 접근할 수 없다.

함수는 괄호를 써서(화살표 함수가 아니라면) 선언하기 때문에, 블록 스코프에 포함된다고 할 수 있다.

 

 

반응형

BELATED ARTICLES

more