일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- ModulesPath
- Spring
- AOP
- ArrayLike
- javaversion
- oracle
- 일급객체
- curryr
- URI$MalformedURIException
- javacversion
- 자유변수
- joinpoint
- tomcat
- TargetObject
- NewServer
- REGEXP_COUNT
- LexicalScope
- SpringFramework
- jdk
- URIMalformedURIException
- URIMalformedURI오류
- AfterReturnning
- springversion
- Annotation
- Eclipse
- ProjectFacets
- map
- SQL
- xml
- URIMalformedURI
- Today
- Total
잼's Tech
렉시컬 스코프 본문
렉시컬 스코프
C, JS, JAVA, Python 등 대부분의 언어는 렉시컬 스코프(Lexical Scope)라는 어휘 범위를 따르고 있습니다.
렉시컬 스코프는 한 마디로 '변수를 어느 곳에서 선언하였는가'에 따라서 스코프(범위)가 정해지는 것입니다.
변수에 의미가 부여되는 시점을 렉스타임이라 하는데 이때 변수를 어느 곳에서 선언하였는가에 따라 변수에 의미를 주는 것입니다.
위와 같이 선언한 후
console.log(animal)을 치면 cat이 출력된다.
kind()는 dog를 출력한다.
animal을 쳤을 때 전역변수인 animal의 값이 바뀌지 않았음을 알수가 있다.
값을 바꾸려면 전역 변수로 덮어여 한다.
https://jaem-tech.tistory.com/3의 1) let keyword 참고
결론은
렉스타임을 지정해주는 방법의 검색 순서는
안쪽(하위)에서 바깥쪽(상위) 스코프로 간다는 것
그렇기에
이것이 가능하다.
console.log 실행시
1) k() 시작, 해당 내부 jaem 찾았기에 jaem에 렉스타임
2) k() 내부 jaem2 못 찾았기에 상위 j()를 찾음
3) j2() 내부 jaem2 찾았기에 jaem2에 렉스타임
4) k() 내부 jaem3 못 찾았기에 상위 j() 찾음
5) j() 내부 jaem3 못 찾았기에 상위 전역공간 찾음
6) 전역공간 jaem3 찾았기에 jaem3에 렉스타임
결론을 다르게 생각한다면
하위에서 상위 스코프로 가니까
상위 스코프에서 하위는 못 찾는다는 것
console.log(study) 실행 시
1) 전역 공간 시작, 해당 공간 study 찾음, study 렉스타임
console.log(study2) 실행 시
1) 전역 공간 시작, 해당 공간에서 못 찾음
2) 상위 공간이 없으니 변수를 찾지못해 렉스 타임을 못함
'기타 개념 정리' 카테고리의 다른 글
[JAVA] 컬렉션(Collection) 프레임워크 (0) | 2021.08.12 |
---|---|
Meta Character (0) | 2021.08.09 |