일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 회고
- create-react-app오류
- 구름톤
- TypeScript
- You are running `create-react-app` 5.0.0
- Til
- which is behind the latest release (5.0.1).
- Today
- Total
비전공 프론트엔드 개발자
스코프(scope) in javascript 본문
스코프 = 변수의 유효 범위 => 이렇게 생각하면 좋다.
스코프의 특징
1. 안쪽에서 바깥쪽으로 접근이 가능하다. ( 반대로 바깥쪽에서 안쪽으로는 접근이 안된다. )
=== 함수를 기준으로 바깥에 선언된 변수는 안쪽에서 접근할 수 있지만, 함수 안에서 선언된 변수는 함수 밖에서는 접근할 수 없다.
2. 스코프는 중첨이 가능하다.
=== a함수 안에 b함수 안에 c 함수가 있다고 하면 c함수는 a함수 울타리와 와 b함수 울타리 안에 위치한다. ( 중접된 울타리 )
3. 가장 바깥의 스코프는 전역 스코프라고 한다. 그리고 그 울타리 안에 선언된 함수 등등 을 지역 스코프라고 한다.
=== 위의 예시를 다시 들면, 세개의 함수밖에 없다고 가정했을 때, a함수가 전역 스코프가 될 것이고, b,c 함수는 지역 스코프라는 말이다.
4. 지역변수는 전역변수보다 더 높은 우선 순위를 갖는다.
=== 위의 예시에서 , a함수 안에서 선언된 변수보다, b,c 에서 선언된 변수가 더 높은 우선 순위를 갖는다는 말이다.
=> a 함수에서 let name = jun 을 선언하고, b함수에서 let name = hyun 을 선언하고 b함수에서 name을 콘솔로 찍어보면
hyun 이라고 출력된다.
스코프의 종류
1. 블록 스코프 ( block scope )
- 중괄호를 기준으로 범위가 지정된다.
- 단, 화살표 함수는 블록 스코프에 속한다.
2. 함수 스코프 ( function scope )
- 함수 선언식 + 함수 표현식 으로 이루어져 있다.
특이점에서 온 변수 선언문 " var "
- 블록 스코프를 무시하고 함수 스코프만 따른다. ( 모든 블록스코프를 무시하는건 아니고, 화살표 함수의 블록 스코프는 따른다. )
- 블록 스코프를 무시하기 때문에 의도한 값과는 다른 값이 출력 될 수 있기 때문에 let 키워드를 추천한다.
값이 변하지 않는 변수라면? " const "
- let 키워드가 동일하게 블록 스코프를 따른다.
- const 로 선언된 값을 재할당 할 경우 타입 애러가 발생한다.
**
ler, var, const 등 변수를 선언할때 써야하는 키워드 없이 지역 스코프로 선언을 할 경우,,,,
전역 스코프로 되버리는 불상사가 생길 수 있다. 고로, 이런 부분들을 잡아주기 위해 파일 첫줄에 미리 선언을
해주면 좋다.