6. 스코프(Scope)
한 줄 정의 : 너의 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. 함수 스코프
어떤 함수 안에 변수를 선언했다면, 변수는 이 안에서만 존재한다.
함수는 서로의 스코프에 접근할 수 없다.
함수는 괄호를 써서(화살표 함수가 아니라면) 선언하기 때문에, 블록 스코프에 포함된다고 할 수 있다.
'한 걸음 > TS & JS' 카테고리의 다른 글
8. IIFE (Immediately-Invoked Function Expressions) (0) | 2020.04.26 |
---|---|
7. 표현식과 명령문(Expression vs Statement) (0) | 2020.04.19 |
5. Typeof / Instance of 연산자 (0) | 2020.04.12 |
4. 형 변환(Type conversion) (0) | 2020.04.12 |
3. 값 유형과 참조 유형(Value Types and Reference Types) (0) | 2020.04.05 |