한 문장으로 말하자면, 클로저는 범위 내에서 외부 바인딩을 캡처하는 함수입니다.
공식 정의: 많은 변수와 이러한 변수에 바인딩된 환경이 있는 표현식(일반적으로 함수)입니다. 이러한 변수는 표현식의 일부라고도 불리기 때문입니다.
자유 변수와 클로저의 관계: 클로저 생성 시 자유 변수는 닫혀 있습니다.
내부 논리는
자유 변수입니다. 함수 내부에 다른 함수가 있는 경우 이러한 내부 함수는 외부 함수에 선언된 변수에 액세스할 수 있습니다(이러한 변수를 자유 변수라고 함).
클로저의 세 가지 특징:
1. 함수 중첩 함수
2. 외부 매개변수와 변수는 함수 내에서 참조될 수 있습니다
3. 매개변수와 변수는 가비지 수집 메커니즘에 의해 재활용되지 않습니다.
클로저의 단점은 메모리 사용량이 증가한다는 점입니다. 부적절한 사용은 쉽게 메모리 누수를 일으킬 수 있습니다.
클로저의 이점: 1. 메모리에 오랫동안 상주 가능
2. 전역 변수의 오염 방지
3. 전용 멤버의 존재
| |||||||||||||||||||||||||||||||||||||||||||||||||
f() | |||||||||||||||||||||||||||||||||||||||||||||||||
charset="UTF-8"> | |
메모리 누수 문제:
Ie의 JS 객체와 DOM 객체는 서로 다른 가비지 수집 메커니즘을 사용하므로 클로저로 인해 IE에서 메모리 누수가 발생합니다. 즉, 메모리에 있는 요소가 파괴될 수 없습니다.
function closure(){ | |
var oDiv = document.getElementById("div1");//oDiv는 사용 후에도 메모리에 남아 있습니다. | |
oDiv.onclic = function(){ | |
alert("oDiv.innerHTML");//여기서 oDiv를 사용하면 메모리 누수가 발생합니다 | |
}; | |
} closure(); //메모리 누수를 방지하기 위해 oDiv를 역참조 function closure(){ var oDiv = document.getElementById("div1");//oDiv를 모두 사용한 후 항상 상주 memory var test = oDiv.innerHTM oDiv.onclic = function(){ Alert(test);//여기서 oDiv를 사용하면 메모리 누수가 발생합니다 } |
위 내용은 한 문장으로 요약: 폐쇄란 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!