JavaScript Closure

geun·2024년 4월 16일

JavaScript

목록 보기
12/12
post-thumbnail

JavaScript

Closure

Closure란, 함수가 선언될(생성될) 그 당시에 주변의 환경과 함께 갇히는 것을 말한다.
이런 설명을 들으면 사실 잘 이해가 안가는데, 먼저 렉시컬 스코프에 대해 알아보자

Lexical scope

  • 함수가 선언이 되는 위치에 따라서 상위 스코프가 결정되는 스코프
  • 즉 함수가 선언이 될 때, 스코프가 생성된다

클로저는 이러한 렉시컬 스코프를 기억하여, 함수가 렉시컬 스코프 밖에서 실행될 때도 이 스코프에 접근 가능하게 해준다.

예를 들어보자

function sayHello () {
  const a = 'Hello';
  const b = 'World';
  
  function sumString () {
    console.log(a + ' ' + b);
  }
  
  return sumString;
}

const myFunc = sayHello();

myFunc();

다음 코드에서 myFunc는 sayHello 함수를 호출하는데, 이 함수는 변수 a,b가 담겨있는 sayHello 함수 바깥에 존재함에도 불구하고 a,b를 참조 할 수 있다. 이것은 위에서 설명한 렉시컬 스코프를 기억해 생성되었을때 클로저가 생성되어, 사용하는데 오류가 발생하지 않는 것이다.

요약하자면, 함수는 생성될때, 렉시컬 스코프를 생성하고 기억한다, 이 렉시컬 스코프를 이용하여 스코프 밖에서도 해당 환경(변수)에 접근할 수 있게 해주는 기능을 클로저라고 한다.

참조 : https://blacklobster.tistory.com/7

0개의 댓글