특정 변수에 접근할 수 있는 범위를 의미한다
스코프는 변수를 다른 변수와 구분할 수 있는 규칙이 되며, 같은 이름을 갖더라도 어느 스코프에 속해 있는지에 따라 변수를 구분한다
이름이 같더라도 변수가 속한 스코프에 따라 서로 다른 변수로 인식한다는 뜻이다
function foo() {
let n = 2; // foo 스코프
}
function bar() {
let n = 3; // bar 스코프
}
function baz() {
let n = 4; // baz 스코프
}
위의 예시에서 foo
, bar
, baz
내의 변수 n
은 이름이 모두 같아 언뜻 보면 식별이 불가능할 것 같지만, 속해 있는 범위 (스코프) 가 다르기 때문에 서로 다른 변수로서 동작한다
foo
함수 내에서는 foo
스코프를 갖는 n
만이 참조되고, bar
함수 내에서는 bar
스코프를 갖는 n
만이 참조되는 식이다
101동 202호에서 동현이의 이름을 불렀을 때 101동 203호의 동현이가 대답하지 않는 것과 같은 이치다
let globalVar = 1;
// 전역에서 접근 가능
function foo() {
let localVar = 2;
// 함수 내에서만 접근 가능
console.log(globalVar); // 가능
}
console.log(localVar); // 불가능
이번에는 함수별로 스코프를 따로 두지 않고, 전역 스코프와 지역 스코프로 구분해 보자
위의 예시에서
globalVar
는 최상단 (전역) 에 선언되어 전역 스코프를 갖기 때문에 어디서든 접근 가능하다localVar
는 foo
함수 내부에 선언되어 지역 스코프를 갖기 때문에 함수 내부에서만 접근이 가능하다let n = 1;
function foo() {
let n = 2;
console.log(n);
}
console.log(n); // 1
foo(); // 2
예시를 조금 바꿔 전역 스코프와 지역 스코프의 변수명을 똑같이 해 보았다