Scope, Closure

곽민서·2026년 9월 7일

Scope

전역 / 지역 → 스코프의 범위
함수 / 블록 → 스코프가 만들어지는 기준
중첩 스코프 → 스코프가 들어가 있는 구조
렉시컬 스코프 → 스코프가 결정되는 기준
스코프 체인 → 변수를 찾는 방법

스코프란?

변수를 사용할 수 있는 범위

  • 전역 스코프 → 프로그램 전체에서 사용 가능
  • 지역 스코프
    • 함수 스코프 → 함수 내부에서 사용 가능
    • 블록 스코프 → {} 내부에서 사용 가능

let, const, var

  • let → {} 블록을 기준으로 범위가 정해짐
  • const → {} 블록을 기준으로 범위가 정해짐
  • var → {} 블록으로는 범위가 제한되지 않고, 함수 기준으로 범위가 정해짐

중첩 스코프, 렉시컬 스코프, 스코프 체인

  • 중첩 스코프
    → 스코프 안에 또 다른 스코프가 있는 관계

  • 렉시컬 스코프
    → 함수가 어디에 작성되었는지를 기준으로
    접근할 수 있는 바깥 스코프가 결정되는 것

  • 스코프 체인
    → 현재 스코프에서 변수를 찾고,
    없으면 바깥쪽 스코프로 이동하면서 찾는 방식
    (현재 → 바깥 → 전역)

Closure

클로저란?

내부 함수가 자신이 선언된 곳의 외부 변수를 기억해서, 외부 함수가 끝난 후에도 그 변수를 사용할 수 있는 현상

  • 외부 함수: 내부 함수를 포함하고 있는 함수
  • 내부 함수: 함수 안에 선언된 함수
  • 외부 변수: 현재 함수의 바깥쪽 스코프에 선언된 변수
function outer() { 
	let name = "민서"; 
    
	function inner() { 
		console.log(name); 
	} 
}
  • outer: 외부 함수
  • inner: 내부 함수
  • name: 외부 변수

return inner, return inner()

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 사용 가능

클로저로 변수를 외부에서 직접 접근하지 못하게 하는 방법

변수를 직접 공개하지 않고 필요한 기능만 함수로 제공 → 클로저를 이용하면 외부에서 변수에 직접 접근하지 못하게 하면서, 내부 함수로 값을 관리할 수 있다.

클로저의 실제 활용

  • 값을 계속 유지해야 할 때
  • 변수를 외부에서 직접 접근하지 못하게 하고 필요한 기능으로만 관리할 때
  • 각각 독립적인 상태를 만들어야 할 때

→ 클로저는 외부 변수의 값을 유지하거나, 변수를 보호하고, 독립적인 상태를 관리할 때 활용된다.

0개의 댓글