📌 Scope: 식별자가 유효한 범위( =네임스페이스 )
모든 식별자는 선언된 위치에 의해 다른 코드가 식별자 자신을 참조할 수 있는 유효 범위가 결정됨
식별자를 검색할 때 사용하는 규칙이다 !
스코프( 유효 범위 )를 통해 식별자인 변수 이름의 충돌을 방지하여 같은 이름의 변수를 사용할 수 있도록 하여 스코프 내에서 식별자는 유일해야 하지만 다른 스코프에는 같은 이름의 식별자를 사용할 수 있고 이름이 같은 두 개의 식별자가 있을 경우 어떤 식별자를 참조해야 할 것인지 '스코프를 통해' 결정된다.
스코프의 종류
스코프 체인( scope chain )
📌 Scope chain: 스코프가 계층적으로 연결된 것
모든 스코프는 하나의 계층적 구조로 연결되며, 모든 지역 스코프의 최상위 스코프는 전역 스코프이다.
변수를 참조할 때 자바스크립트 엔진은 스코프 체인을 통해 변수를 참조하는 코드의 스코프에서 시작하여 상위 스코프 방향으로 이동하며 선언된 변수를 거색한다. 즉, 상위 스코프에서 선언한 변수를 하위 스코프에서는 참조할 수 있으나 하위 스코프에서 유효한 변수를 상위 스코프에서는 참조할 수 없다.
함수는 전역 함수 > 외부 함수 > 중첩 함수로 중첩될 수 있다. 이 것은 지역 스코프 또한 중첩이 가능하다는 것을 의미한다. 스코프는 함수의 중첩에 의해 계층적 구조를 갖는다.
동적스코프 / 정적( 렉시컬 ) 스코프
let x = 1;
const example = () => {
let x = 10;
example2();
}
example();
let x = 10;
const example2 = () => {
console.log(x);
}
example2();