1. 익명 기능
함수는 JavaScript에서 가장 유연한 개체입니다. 여기서는 익명 함수의 사용에 대해서만 설명합니다. 익명 함수: 함수 이름이 없는 함수입니다.
1.1 함수의 정의, 먼저 함수의 정의를 간략하게 소개합니다. 크게 세 가지로 나눌 수 있습니다
첫 번째 유형: 가장 일반적인 유형이기도 합니다
두 번째 방법: 이 방법은 함수 생성자를 사용하고 매개변수 목록과 함수 본문을 모두 문자열로 처리하므로 매우 불편하므로 권장되지 않습니다.
세 번째 유형:
var double = function(x) { return 2* x }
"=" 오른쪽에 있는 함수는 익명 함수라는 점에 유의하세요. 함수를 생성한 후 해당 함수는 square 변수에 할당됩니다.
1.2 익명 함수 생성
첫 번째 방법은 위에서 언급한 것처럼 제곱함수를 정의하는 방법인데, 이 역시 가장 많이 사용되는 방법 중 하나입니다.
두 번째 방법:
여기서(첫 번째 대괄호 안에) 익명 함수가 생성되고, 두 번째 대괄호는 익명 함수를 호출하고 매개변수를 전달하는 데 사용됩니다.
2. 폐쇄
클로저를 뜻하는 영어 단어는 클로저(closure)인데, 이는 자바스크립트 지식의 매우 중요한 부분입니다. 왜냐하면 클로저를 사용하면 코드의 양을 크게 줄이고 코드를 더 명확하게 보이게 만드는 등의 작업을 할 수 있기 때문입니다. 한마디로 매우 강력합니다.
클로저의 의미: 직설적으로 말하면 클로저는 함수의 중첩입니다. 외부 함수가 실행되더라도 내부 함수는 외부 함수의 모든 변수를 사용할 수 있습니다(여기에는 JavaScript 범위 체인이 포함됩니다).
예시 1
이 예제는 실행 프로세스를 주의 깊게 분석한 후에도 여전히 많은 지식 포인트가 있습니다. checkClosure 함수의 실행은 즉각적이며(아마도 0.00001밀리초만 소요될 수 있음) 변수 str이 함수 본문에 생성됩니다. checkClosure.의 경우 setTimeout의 익명 함수에 str에 대한 참조가 있으므로 checkClosure가 실행된 후에 str이 해제되지 않습니다. 2초 후 함수 본문의 익명 함수가 실행되고 str이 해제됩니다.
예제 2, 최적화된 코드
익명 함수의 가장 큰 용도는 클로저(JavaScript 언어의 기능 중 하나)를 생성하는 것이며, 전역 변수의 사용을 줄이기 위해 네임스페이스를 구축할 수도 있습니다.
oEvent.addEvent = addEvent;
oEvent.removeEvent = 제거이벤트;
})();
이 코드에서 addEvent, RemoveEvent 함수는 로컬 변수이지만, 전역 변수 oEvent를 통해 사용할 수 있어 전역 변수의 사용이 대폭 줄어들고 웹 페이지의 보안이 강화됩니다. 우리는 다음 코드를 사용하고 싶습니다: oEvent.addEvent(document.getElementById('box') , 'click' , function(){});
예 4:
여기에서는 변수 rainman을 만들고 익명 함수를 직접 호출하여 5로 초기화합니다. 이 작은 트릭은 때때로 매우 실용적입니다.
예 5:
이 코드의 변수 one은 (함수 내에서 정의되기 때문에) 지역 변수이므로 외부에서 접근할 수 없습니다. 하지만 여기서는 변수 1에 액세스할 수 있는 내부 함수를 만들었고 전역 변수 외부는 내부를 참조하므로 외부를 세 번 호출하면 증분 결과가 나타납니다.
4. 주목
4.1 클로저를 사용하면 내부 함수가 상위 함수의 변수를 참조할 수 있지만 변수는 최종 값입니다
예 6:
var 목록 = document.getElementsByTagName('li');
for(var i = 0 , len = listed.length ; i < len ; i ){
목록[ i ].onmouseover = function(){
경고(i)
};
}
마우스를 각
해결책 1:
해결책 2:
해결책 3:
4.2 메모리 누수
클로저를 사용하면 브라우저에서 메모리 누수가 발생할 수 있습니다. 심각한 경우 브라우저가 중단될 수 있습니다. 관심이 있는 경우 http://www.jb51.net/article/57404를 참조하세요. HTM