스코프와 렉시컬 스코프

스코프

특정 변수에 접근할 수 있는 범위를 의미한다

스코프는 변수를 다른 변수와 구분할 수 있는 규칙이 되며, 같은 이름을 갖더라도 어느 스코프에 속해 있는지에 따라 변수를 구분한다

이름이 같더라도 변수가 속한 스코프에 따라 서로 다른 변수로 인식한다는 뜻이다

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); // 불가능

이번에는 함수별로 스코프를 따로 두지 않고, 전역 스코프와 지역 스코프로 구분해 보자

위의 예시에서

let n = 1;

function foo() {
	let n = 2;
	console.log(n);
}

console.log(n); // 1
foo(); // 2

예시를 조금 바꿔 전역 스코프와 지역 스코프의 변수명을 똑같이 해 보았다