클로저는 JavaScript의 기본 아이디어이지만 초보자에게는 클로저가 모호하고 이해하기 어려울 수 있습니다. 특히 ECMA 표준의 정의는 실제 경험이 없으면 이해하기 어려울 수 있습니다. 따라서 이번 포스팅에서는 클로저 개념을 길게 설명하기보다는 실제 코드를 사용하여 이해하기 쉽도록 하겠습니다.
function A(name){ function B(){ console.log(name); } return B; } var C = A("Closure"); C();//Closure
가장 간단한 클로저입니다.
이제 기본 사항을 알았으니 이것이 일반적인 기능과 어떻게 다른지 간략하게 살펴보겠습니다. 위의 코드를 자연어로 번역하면 다음과 같습니다.
하나의 문으로 다음 다섯 가지 작업을 요약할 수 있습니다.
함수 A 내부의 함수 B와 변수 이름은 함수 A 외부의 변수 C에서 참조됩니다.
약간 수정하면 이 문은 클로저를 다음과 같이 정의합니다.
내부 함수가 외부 함수 외부의 변수에 의해 참조되면 클로저가 형성됩니다.
따라서 위의 5가지 작업을 수행하면 클로저가 정의됩니다.
클로저의 용도를 이해하기 전에 JavaScript의 GC(가비지 수집) 메커니즘을 이해해 보겠습니다.
JavaScript에서는 객체가 더 이상 참조되지 않으면 GC에 의해 회수되고, 그렇지 않으면 메모리에 계속 유지됩니다.
위의 예에서 B는 A 내에 정의되어 있으므로 B는 A에 종속되고, 외부 변수 C가 B를 참조하므로 A는 C에서 간접적으로 참조됩니다.
즉, A는 GC에 수집되지 않고 계속해서 메모리에 보관됩니다. 이 추론을 증명하기 위해 위의 예를 약간 개선해 보겠습니다.
function A(){ var count = 0; function B(){ count ++; console.log(count); } return B; } var C = A(); C();// 1 C();// 2 C();// 3
카운트가 초기화되지 않는 이유는 무엇인가요?
폐쇄 메커니즘:
따라서 모듈에서 일부 변수를 정의하고 이러한 변수를 메모리에 유지하되 전역 변수를 "오염"시키지 않으려는 경우 클로저를 사용하여 이 모듈을 정의할 수 있습니다.
위 내용은 [JavaScript] 몇 초 안에 클로저 이해하기의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!