>  기사  >  웹 프론트엔드  >  JS에서 클로저의 의미

JS에서 클로저의 의미

一个新手
一个新手원래의
2017-09-11 10:34:461217검색


클로저

클로저는 다른 함수 범위에 있는 변수에 액세스할 수 있는 함수입니다.

클로저를 만드는 방법

가장 일반적인 방법은 함수 안에 또 다른 함수를 만드는 것입니다. TrialFunction() 함수를 예로 들어 보겠습니다.

function TrialFunction(property) {

      return function(a, b) {
           var a1 = a[property];           var b1 = b[property];           if (a1 < b1) {                return -1;
           } else if (a1 > b1) {                return 1;
           } else {                return 0;
           }
      };
}

위 코드에서 내부 함수는 외부 함수의 변수 속성에 액세스합니다. 내부 함수가 반환되어 다른 곳에서 호출되더라도 다른 사람들은 여전히 ​​속성 변수에 액세스할 수 있습니다.

이런 상황은 이 내부 함수의 범위 체인에 TrialFunction의 범위가 포함되어 있기 때문입니다.

함수가 호출되면 실행 환경(Execution Context)과 해당 스코프 체인이 생성됩니다. 이어서 함수의 활동 개체는 인수 값과 기타 명명된 매개변수를 사용하여 초기화됩니다. 그러나 범위 체인에서는 외부 함수의 활성 개체가 항상 두 번째 위치에 있고, 외부 함수의 외부 함수의 활성 개체가 세 번째 위치에 있으며, 마지막으로 전역 실행 환경인 범위 체인에 달합니다.

함수 실행 중에 변수의 값을 읽고 쓰려면 범위 체인에서 변수를 찾아야 합니다.

이 범위 체인 메커니즘은 부작용을 초래합니다. 즉, 클로저는 포함 함수에 있는 모든 변수의 마지막 값만 얻을 수 있습니다.
예:

function example() {
   var result = new Array();  
   for (var i = 0; i < 10; i++) 
   {
      result[i] = function() 
      {
         return i;
      }
   }   return result;
}

이 함수는 배열을 반환합니다. 일반적으로 모든 사람은 각 함수가 자체 인덱스, 즉 [0, 1, 2, ...9]를 반환해야 한다고 생각합니다. 10이 돌아왔습니다.

위 내용은 JS에서 클로저의 의미의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.