JavaScript의 클로저

폐쇄


  • 클로저는 함수 내부에 정의된 함수입니다.
  • 예: 아래 코드에서 innerFunction은 클로저입니다.

  • function outerFunction() {
      function innerFunction() {
        let text = "I am a closure";
        return text;
      }
      let text = "I am an outer function";
      return text;
    }
    



    기능 범위 외부에서 클로저에 액세스 가능하게 만들기


  • outerFunction을 호출하면 "나는 외부 함수입니다"라는 텍스트가 반환됩니다.
  • outerFunction 내부에서 innerFunction을 호출할 수 있습니다.
  • 그러나 전역 범위에서 innerFunction을 어떻게 호출할 수 있습니까?
  • 그렇게 하기 위해 outerFunction에 텍스트를 반환하는 대신 innerFunction 자체를 아래와 같이 반환할 수 있습니다.

  • function outerFunction() {
      function innerFunction() {
        let text = "I am a closure";
        return text;
      }
      return innerFunction;
    }
    

  • 이제 innerFunction에 액세스할 수 있습니다.

  • // invoking outerFunction to get access to _innerFunction_
    console.log(outerFunction()); // returns [Function: innerFunction]
    // This shows we have access to the _innerFunction_
    

  • 두 개의 괄호를 사용하여 outerFunction을 호출하면 innerFunction 내부에 정의된 변수 텍스트가 아래와 같이 반환되는 것을 볼 수 있습니다.

  • console.log(outerFunction()()); // return "I am a closure"
    


  • 함수 내부 깊숙이 침투하는 클로저를 가질 수 있습니다.
  • 예를 들어:

  • function addition(num1) {
      var addition2 = function (num2) {
        var addition3 = function (num3) {
          return num1 + num2 + num3;
        };
        return addition3;
      };
      return addition2;
    }
    
    console.log("3 + 3 + 3 = ", addition(3)(3)(3)); // returns 9
    console.log("4 + 5 + 6 = ", addition(4)(5)(6)); // return 15
    

    좋은 웹페이지 즐겨찾기