
전역 / 지역 → 스코프의 범위
함수 / 블록 → 스코프가 만들어지는 기준
중첩 스코프 → 스코프가 들어가 있는 구조
렉시컬 스코프 → 스코프가 결정되는 기준
스코프 체인 → 변수를 찾는 방법
변수를 사용할 수 있는 범위
{} 내부에서 사용 가능{} 블록을 기준으로 범위가 정해짐{} 블록을 기준으로 범위가 정해짐{} 블록으로는 범위가 제한되지 않고, 함수 기준으로 범위가 정해짐중첩 스코프
→ 스코프 안에 또 다른 스코프가 있는 관계
렉시컬 스코프
→ 함수가 어디에 작성되었는지를 기준으로
접근할 수 있는 바깥 스코프가 결정되는 것
스코프 체인
→ 현재 스코프에서 변수를 찾고,
없으면 바깥쪽 스코프로 이동하면서 찾는 방식
(현재 → 바깥 → 전역)
내부 함수가 자신이 선언된 곳의 외부 변수를 기억해서, 외부 함수가 끝난 후에도 그 변수를 사용할 수 있는 현상
function outer() {
let name = "민서";
function inner() {
console.log(name);
}
}
outer: 외부 함수inner: 내부 함수name: 외부 변수return inner; // inner 함수 자체를 반환
return inner(); // inner 함수를 실행하고 결과를 반환
inner: 함수 이름inner(): 그 함수를 실행return inner: 그 함수 자체를 반환function outer() {
let name = "민서";
function inner() {
console.log(name);
}
return inner;
}
const hello = outer();
hello(); // 민서
outer() 실행→inner 함수 반환→outer() 실행 종료→hello() 실행→inner가 name 사용 가능
변수를 직접 공개하지 않고 필요한 기능만 함수로 제공 → 클로저를 이용하면 외부에서 변수에 직접 접근하지 못하게 하면서, 내부 함수로 값을 관리할 수 있다.
→ 클로저는 외부 변수의 값을 유지하거나, 변수를 보호하고, 독립적인 상태를 관리할 때 활용된다.