Closure(in JavaScript)

클로저란?

  • 자신의 상위 스코프에 있는 변수에 접근할 수 있는 함수
    • 실제로, 함수가 상위 스코프 변수에 접근할 때, 그 함수는 자동으로 클로저가 된다.
  • 일반적인 함수보다 더 많은 메모리와 컴퓨팅을 요구한다.

스코프: 변수의 유효 범위, 변수에 접근할 수 있는 범위

클로저가 아닌 일반 함수의 경우, 변수가 스택 메모리에 저장된다. → 수명이 짧다.

클로저의 경우, 변수가 힙 메모리에 저장된다. → 수명이 길다.

가비지 컬렉터에 의해 나중에 제거되기 때문

클로저의 사용 이유

  • 데이터 캡슐화
    • 데이터 누수 or 노출을 막기 위해 사용

렉시컬 스코프(or 정적 스코프)란?

  • 함수의 상위 스코프를 결정하는 방식
  • 함수를 ‘어디서 호출했는지’가 아니라, ‘어디에 선언했는지’에 따라 결정된다.
    • 반대로, 동적 스코프는 함수의 호출 위치에 따라 결정된다.
var x = 1;

function foo() {
  var x = 10;
  bar();
}

function bar() {
  console.log(x);
}

foo(); // ?
bar(); // ?

⇒ 전역 변수 x의 값 1을 두 번 출력한다. → JS는 렉시컬 스코프를 따른다.


참고자료

Scope | PoiemaWeb

Closures Explained in 100 Seconds // Tricky JavaScript Interview Prep

좋은 웹페이지 즐겨찾기