클로저는 다른 함수 범위에 있는 변수에 액세스할 수 있는 함수입니다.
가장 일반적인 방법은 함수 안에 또 다른 함수를 만드는 것입니다. 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!