본문 바로가기
  • 🦄 창민이 개발일지
Computer Science

클로저(Closure)

by 창민이 개발일지 2024. 4. 24.

MDN 클로저

  • 클로저는 주변 상태(어휘적 환경,렉시컬 환경(Lexical Enivronment))에 대한 참조와 함께 묶인(포함된) 함수의 조합
  • 클로저는 내부 함수에서 외부 함수의 범위에 대한 접근을 제공합니다
  • 클로저는 자신이 생성될 때의 환경(Lexical environment)을 기억하는 함수

 

스코프 범위

https://velog.io/@gml9812/%ED%81%B4%EB%A1%9C%EC%A0%80closure%EA%B0%80-%EB%AD%98%EA%B9%8C

스코프는 해당 함수를 실행시키는 환경을 의미하며, 스코프는 함수를 호출할 때가 아니라 함수를 어디에 선언하였는지에 따라 결정됩니다. 이를 결정하는 것을 렉시컬 스코핑(Lexical Scoping)이라고합니다. 

function outerFunction () {
  var x = 10;
  var innerFunc = function () { console.log(x); };
  innerFunc();
}

outerFunc(); // 10
  • outerFunc 함수가 실행되어 내부함수 innerFunc가 호출되면 자신의 실행 컨텍스트가 실행 컨텍스트 스택에 쌓이고 변수 객체(Variable Object)와 스코프 체인(Scope chain) 그리고 this에 바인딩할 객체가 결정됩니다.
  • 이때 스코프 체인은 전역 스코프를 가리키는 전역 객체와 함수 outerFunc의 스코프를 가리키는 함수 outerFunc의 활성 객체(Activation object) 그리고 함수 자신의 스코프를 가리키는 활성 객체를 순차적으로 바인딩합니다.
  • 스코프 체인이 바인딩한 객체가 바로 렉시컬 스코프입니다.
  • 내부함수 innerFunc가 자신을 포함하고 있는 외부함수 outerFunc의 변수 x에 접근할 수 있는 것, 다시 말해 상위 스코프에 접근할 수 있는 것은 렉시컬 스코프의 레퍼런스를 차례대로 저장
  • 클로저는 반환된 내부함수가 자신이 선언됐을 때의 환경(Lexical environment)인 스코프를 기억하여 자신이 선언됐을 때의 환경(스코프) 밖에서 호출되어도 그 환경(스코프)에 접근할 수 있는 함수

'Computer Science' 카테고리의 다른 글

Mysql 풀텍스트인덱스(Full-Text Index)  (0) 2024.05.08
코루틴(Coroutine)  (0) 2024.04.24
순수함수(Pure Function)  (0) 2024.04.10
코틀린(Kotlin)  (0) 2024.04.07
병렬처리(Parallel Processing)  (0) 2023.04.06