closure

RumbleBi·2022년 6월 7일
0

JavaScript

목록 보기
5/10
post-thumbnail

closure 란?

Closure 는 두 개의 함수로 만들어진 환경 으로 이루어진 특별한 객체의 한 종류이다.
여기서 환경 이란, 클로저가 생성될 때 그 범위 에 있던 여러 로컬 변수들이 포함된 context를 말한다.

여기서 환경 이란?
클로저의 개념은 자바스크립트의 고유 개념이 아니므로 클로저의 정의가 ECMAScript 사양에는 나오지 않는다. 단순히 MDN 에서는 클로저에 대해 다음과 같이 정의하고 있다.
"클로저는 함수와 그 함수가 선언된 렉시컬 환경과의 조합이다."
여기서 말하는 렉시컬 환경이 위에서 설명한 환경 과 맥락이 일치한다. 렉시컬의 개념에 대해 설명하기에는 길기 때문에 다른 포스팅에서 구체적으로 설명하겠다.

closure 가 생성되기 위한 조건들

  1. 내부 함수가 익명 함수 로 되어 외부 함수의 리턴값 으로 사용된다.
  2. 내부 함수는 외부 함수실행 환경(execution environment)에서 실행된다.
  3. 내부 함수에서 사용되는 변수 x외부 함수변수 스코프에 있다.

예제코드 1

function outer() {
  var name = "closure";
  function inner() {
    console.log(name);
  }
  inner();
}
outer(); // console 'closure'

outer 함수를 실행시키는 context 에는 name 이라는 변수가 존재하지 않는다는 것을 확인할 수 있다.

예제코드 2

var name = "Warning";
function outer() {
  var name = "closure";
  return function inner() {
    console.log(name);
  };
}
var callFunc = outer();
callFunc();

위 코드에서 callFunc클로저 라고 한다. callFunc 호출에 의해 name 이라는 값이 console 에 나오는데, 값은 Warning 이 아니라 closure 라는 값이다. 즉, outer 함수의 context 에 속해있는 변수를 참조 하는 것이다. 여기서 outer 함수의 로컬변수 로 존재하는 namefree variable (자유변수) 라고 한다.

이처럼 외부 함수 호출이 종료되더라도 외부 함수의 지역 변수변수 스코프 객체체인 관계 를 유지할 수 있는 구조를 클로저라고 한다. 보다 정확히는 외부 함수 에 의해 반환되는 내부 함수 를 가리키는 말이다.

context 는 무슨 뜻?
context 는 어떤 행위가 일어나기 위해서 사용하는 정보의 집합체 라고 할 수 있다.
참조 : https://pflb.tistory.com/30 실생활의 예를 들어서 이해하기 쉽게 설명이 잘 나와있다.

profile
기억보다는 기록하는 개발자

0개의 댓글