-
자바스크립트 스코프 scope - 식별자 결정문제와 해결/javascript 2023. 4. 12. 00:27

스코프는 함수 사용할 때 이미 경험했다.
함수 본문에 선언한 변수는 함수 밖에서는 참조할 수 없다.
하지만, 함수 본문 안에서 함수 밖의 변수는 참조할 수 있다.
함수 안쪽의 변수와 함수바깥쪽의 변수 이름이 같다면 어떤걸 참고하는지 궁금했다.
식별자 결정
1 const a = 20; 2 3 function findNumber() { 4 const a = 10; 5 console.log(a); // 10 - 4번 라인의 a 참조 6 } 7 8 console.log(a); // 20 - 1번 라인의 a 참조 9 10 findNumber();findNumber 함수 안쪽에 선언한 a,b는 같은 지역 스코프인 findNumber함수 안에서만 참조할 수 있다.
그런데 6번 라인에서 참조하는a는 4번과 1번중 어떤 a를 참조하는걸까.
예를들어, 지하철을 타고 가다가 배가 아파서 화장실을 찾는데
식은땀도 난다,나는 지금 지하에 있고, 화장실은 지하에 1개 지상1층에 1개 이렇게 있다.
그러면 식은땀 나는 상황에 가까운 화장실인 지하 화장실로 간다.
잠시후, No.2가 해결된 나는 1층화장실은 갈 의미가 없어서 안간다.
참조도 마찬가지. 식별자 a를 같은 스코프 내에서 console.log로 참조하면, 가까운 식별자를 참조해버린다. 그러면
원하는 식별자를 참조한 console.log는 배가부른듯, 다른 먹이감을 찾지않고 전역 스코프의 변수 a는 참조하지않는다.
이렇게 같은 이름을 가진 식별자중 하나를 참조하고, 나머지 식별자는 참조하지않아 마치 가려지는 것 같은 현상을
변수 쉐도잉 (variables shadowing)이라 한다.
이렇게 자바스크립트 엔진은 이름이 같은 두 개의 변수 중에서 어떤 변수를 참조해야 할 것인지를 결정해야하는데,
이걸 식별자 결정 이라 한다. 여기서 스코프를 통해 어떤 변수를 참조해야 할 것인지 결정한다.
'문제와 해결 > javascript' 카테고리의 다른 글
UDEMY 유데미 - TDD로 배우는 웹 프론트엔드 강의 리뷰 (3) 2024.03.30 자바스크립트 원시형 데이터타입. (1) 2024.02.11 자바스크립트 실행컨텍스트의 역할(렉시컬환경-평가,실행,스코프 등록) (2) 2023.04.28 자바스크립트 실행컨텍스트 (execution context) 에서 소스코드, 평가와 실행 (1) 2023.04.19 자바스크립트 스코프 scope - 스코프의 종류 (3) 2023.04.14