잼's Tech

렉시컬 스코프 본문

기타 개념 정리

렉시컬 스코프

차잼 2021. 8. 9. 20:18

렉시컬 스코프

Lexical Scpoe

C, JS, JAVA, Python 등 대부분의 언어는 렉시컬 스코프(Lexical Scope)라는 어휘 범위를 따르고 있습니다.

렉시컬 스코프는 한 마디로 '변수를 어느 곳에서 선언하였는가'에 따라서 스코프(범위)가 정해지는 것입니다.

변수에 의미가 부여되는 시점을 렉스타임이라 하는데 이때 변수를 어느 곳에서 선언하였는가에 따라 변수에 의미를 주는 것입니다.


UnderStand Lexical Scpoe 1

위와 같이 선언한 후
console.log(animal)을 치면 cat이 출력된다.
kind()는 dog를 출력한다.
animal을 쳤을 때 전역변수인 animal의 값이 바뀌지 않았음을 알수가 있다.

UnderStand Lexical Scpoe 2

값을 바꾸려면 전역 변수로 덮어여 한다.
https://jaem-tech.tistory.com/3의 1) let keyword 참고


결론은
렉스타임을 지정해주는 방법의 검색 순서는

안쪽(하위)에서 바깥쪽(상위) 스코프로 간다는 것

그렇기에

UnderStand Lexical Scpoe 3

이것이 가능하다.
console.log 실행시
1) k() 시작, 해당 내부 jaem 찾았기에 jaem에 렉스타임
2) k() 내부 jaem2 못 찾았기에 상위 j()를 찾음
3) j2() 내부 jaem2 찾았기에 jaem2에 렉스타임
4) k() 내부 jaem3 못 찾았기에 상위 j() 찾음
5) j() 내부 jaem3 못 찾았기에 상위 전역공간 찾음
6) 전역공간 jaem3 찾았기에 jaem3에 렉스타임

결론을 다르게 생각한다면
하위에서 상위 스코프로 가니까

상위 스코프에서 하위는 못 찾는다는 것

Reference Error

console.log(study) 실행 시
1) 전역 공간 시작, 해당 공간 study 찾음, study 렉스타임

console.log(study2) 실행 시
1) 전역 공간 시작, 해당 공간에서 못 찾음
2) 상위 공간이 없으니 변수를 찾지못해 렉스 타임을 못함

'기타 개념 정리' 카테고리의 다른 글

[JAVA] 컬렉션(Collection) 프레임워크  (0) 2021.08.12
Meta Character  (0) 2021.08.09
Comments