목차
1. 스코프 체인
2. 정적 스코프 (렉시컬 스코프)
3. 참고
1. 스코프 체인
스코프 체인이란, 식별자(변수 또는 함수)를 검색하는 과정을 의미합니다.
검색하는 과정에서 식별자를 찾지 못하면, 상위 스코프(또는 외부 스코프)에서 해당 식별자를 찾으려고 합니다.
식별자를 찾지 못하면 에러를 발생시키는데요.
하위 스코프에서 상위 스코프로 이동하면서 식별자를 찾는 과정이 꼬리에 꼬리를 무는 형태이기 때문에 체인이란 용어를 사용하는 듯합니다.
let sky = 'global sky';
function printSky1() {
console.log(sky);
}
function printSky2() {
let sky = 'local sky';
console.log(sky);
}
printSky1(); // global sky
printSky2(); // local sky
위의 코드에서 스코프는 전역 스코프, 함수 스코프 2개가 생성됩니다.
printSky1 함수는 함수 스코프(printSky1)에서 sky란 식별자를 찾지 못해서, 상위 스코프인 전역 스코프에 있는 sky 식별자를 찾아냅니다.
printSky2 함수는 함수 스코프(printSky2)에서 sky 식별자를 찾아냈습니다.
그렇다면 다음 코드를 살펴보겠습니다.
let sky = 'global sky';
function printSky1() {
let sky = 'local sky';
printSky2();
}
function printSky2() {
console.log(sky);
}
printSky1(); // global sky
printSky2 함수가 local sky를 출력하지 않고, global sky를 출력하고 있습니다.
printSky2 함수는 printSky1 함수 스코프 안에서 실행되는 것 같은데 왜 그럴까요?
2. 정적 스코프 (렉시컬 스코프)
자바스크립트 함수의 상위 스코프는 함수를 선언했을 때 결정됩니다.
함수가 실행되었을 때(동적) 가 아닌 선언되었을 때(정적) 스코프가 결정되기 때문에 정적 스코프라고 하며, 렉시컬 스코프라고도 불리기도 합니다.
let sky = 'global sky';
function printSky1() {
let sky = 'local sky';
printSky2();
}
function printSky2() {
console.log(sky);
}
printSky1(); // global sky
printSky1 함수의 상위 스코프는 전역 스코프가 되고, printSky2 함수의 상위 스코프도 전역 스코프입니다.
printSky2 함수가 실행될 때, sky 식별자를 printSky2 함수 스코프에서 찾지 못했기 때문에, 전역 스코프에서 식별자를 찾으려고 하고 결과적으로 global sky를 출력하는 것입니다.
참고
1. 모던 자바스크립트 Deep Dive
'JavaScript' 카테고리의 다른 글
[Javascript] 쓰로틀링(throttle), 디바운싱(debounce)을 헷갈리지 말자! (0) | 2023.03.15 |
---|---|
[Javascript] 2차원 배열 만들기 + 2차원 배열 순회 (0) | 2022.10.15 |
[Javascript] 함수 선언문과 함수 표현식 (0) | 2022.09.10 |
[Javascript] 배열 메소드 - forEach, map (순회 목적) (0) | 2022.07.31 |
[Javascript] 비동기 함수들이 동작하는 원리 (0) | 2022.04.13 |