자바스크립트의 클로저

Mar 07 2023
JavaScript에서 함수는 특정 작업을 수행하도록 설계된 코드 블록입니다. 호출하면 실행됩니다.
자바스크립트의 클로저

JavaScript에서 함수는 특정 작업을 수행하도록 설계된 코드 블록입니다. 호출하면 실행됩니다.

예를 들어:

function myFunction(message){
  console.log(message)
}

myFunction("Hello there!!")

myFunction("Welcome, boss")

그러나 첫 번째 실행이나 이전 실행에서 무슨 일이 일어났는지 알고 싶다면 어떻게 해야 할까요? 그것이 폐쇄가 오는 곳입니다.

폐쇄란 무엇입니까?

간단히 말해서 함수가 외부 함수 범위에 액세스할 수 있는 다른 함수를 반환하는 경우를 JavaScript에서는 클로저라고 합니다.

예를 들어:

function outer (){
  let counter = 0;
  function inner (){
    counter++;
    return counter;
  }
  return inner
}


const result = outer()

function inner (){
  counter++;
  return counter;
}

따라서 어떻게든 JavaScript는 이전 counter값을 기억하고 있으며 수학 연산을 수행하고 있습니다.
Js가 어떻게 하고 있는지 물어볼 수 있습니다.

함수가 함수를 반환할 때 함수만 반환하는 것이 아니라 해당 함수의 어휘 범위도 반환합니다. 반환된 함수와 함께 숨겨진 속성으로 반환된 함수와 관련된 모든 변수, 데이터. 그 숨겨진 속성은 또한Backpack

이 배낭에는 많은 이름이 있습니다.

  • '변수 환경'(COVE)에 대한 폐쇄
  • 영구 어휘 범위 참조 데이터(PLSRD)
  • 배낭
  • 폐쇄

다른 예를 살펴보겠습니다.

function outer (){
  let counter = 0;
  function inner (){
    counter++;
    return counter;
  }
  return inner
}

const result = outer()

result() // 1
result() // 2

const anotherResult = outer()
anotherResult() // 1
anotherResult() // 2


폐쇄 이유:

  • 원스 와 메모라이즈 같은 강력한 기능을 가능하게 하는 도우미 기능을 만드는 데 도움이 됩니다 .
  • 어휘 범위와 클로저를 사용하여 Iterator 와 Generator를 만드는 데 도움이 됩니다 .
  • 모듈 패턴을 포함한 많은 JavaScript 디자인 패턴은 전역 네임스페이스를 오염시키지 않고 애플리케이션의 상태를 보존함으로써 클로저를 사용합니다.
  • 콜백 과 약속은 클로저에 의존하여 비동기 JavaScript 세계에서 상태를 유지합니다.