자바스크립트의 클로저
클로저는 JavaScript에서 중요한 개념 중 하나입니다. 그것은 널리 논의되고 여전히 혼란스러운 개념입니다. 폐쇄가 무엇인지 이해합시다.
클로저란 무엇입니까?
MDN Web Docs에 명시된 바와 같이, 클로저는 주변 상태(어휘 환경)에 대한 참조와 함께 번들로 묶인(밀봉된) 기능의 조합입니다. 즉, 클로저를 사용하면 내부 함수에서 외부 함수의 범위에 액세스할 수 있습니다. JavaScript에서는 함수가 생성될 때마다 함수가 생성될 때마다 클로저가 생성됩니다.
어휘 범위 란 무엇입니까?
어휘 범위는 함수 범위가 상위 범위의 변수에 액세스할 수 있는 기능입니다. 우리는 자식 함수를 호출하여 부모 함수에 어휘적으로 바인딩됩니다.
간단한 클로저
JavaScript의 간단한 클로저 예제를 살펴보겠습니다.
function OuterFunction() {
var outerVariable = 1;
function InnerFunction() {
alert(outerVariable);
}
InnerFunction();
}
위의 예에서 InnerFunction()은 outerVariable에 접근할 수 있습니다.
이제 InnerFunction()은 별도로 실행되더라도 outerVariable에 접근할 수 있습니다. 다음 예를 고려하십시오.
function OuterFunction() {
var outerVariable = 100;
function InnerFunction() {
alert(outerVariable);
}
return InnerFunction;
}
var innerFunc = OuterFunction();
innerFunc(); // 100
위의 예에서 InnerFunction을 반환합니다. OuterFunction()을 호출하면 OuterFunction에서 InnerFunction을 반환합니다. 변수 innerFunc는 OuterFunction()이 아닌 InnerFunction()만 참조합니다. 따라서 이제 innerFunc()를 호출하면 OuterFunction()에 선언된 outerVariable에 계속 액세스할 수 있습니다. 이것을 클로저라고 합니다.
위의 예는 또한 로컬 변수가 클로저에서 복사되지 않는다는 것을 보여줍니다. 클로저는 원래 변수 자체에 대한 참조를 유지합니다. 외부 함수가 종료된 후에도 스택 프레임이 메모리에 살아 있는 것과 같습니다.
폐쇄 범위 체인
모든 클로저에는 세 가지 범위가 있습니다.
클로저를 언제 사용해야 하나요?
클로저는 함수와 연결된 개인 상태가 필요할 때마다 유용합니다. 이것은 매우 일반적인 시나리오이며 기억하십시오. JavaScript는 2015년까지 클래스 구문이 없었으며 여전히 private 필드 구문이 없습니다. 폐쇄는 이러한 요구를 충족시킵니다.
성능 고려 사항
특정 작업에 클로저가 필요하지 않은 경우 다른 함수 내에서 불필요하게 함수를 만드는 것은 현명하지 않습니다. 처리 속도와 메모리 소비 측면에서 스크립트 성능에 부정적인 영향을 미치기 때문입니다.
최종 포인트:
이것이 누군가를 돕기를 바랍니다.
이 게시물이 마음에 들면 다음을 통해 더 많은 정보를 찾을 수 있습니다.
Reference
이 문제에 관하여(자바스크립트의 클로저), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/forkbikash/closure-in-javascript-3hga텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)