>웹 프론트엔드 >JS 튜토리얼 >jQuery 소스코드 분석 참고사항 (4) Ready function_jquery

jQuery 소스코드 분석 참고사항 (4) Ready function_jquery

WBOY
WBOY원래의
2016-05-16 18:06:11993검색

이 함수는 jQuery 문서에서 세 가지 동등한 형식으로 언급됩니다.

코드 복사 코드는 다음과 같습니다.

// jQuery.fn.ready에 정의됨
$(document).ready(handler)
// 이전과 동일하며 권장되지 않음
$().ready (handler) );
$(handler)를 jQuery 객체에서만 처리합니다.
// 위 형식의 정의:
if(jQuery.isFunction(selector) {
return rootjQuery.ready(selector);
}

따라서 실제로는 하나의 형식으로 요약됩니다. jQuery.fn.ready(fn)는 다음과 같이 정의됩니다.

코드 복사 코드는 다음과 같습니다.
ready: function(fn) {
// 이벤트 바인딩 DOM
jQuery.binReady();// 콜백 함수 실행
readyList.done(fn);// jQuery 객체 반환
return this; 🎜>
실제 jQuery 내부에는 fn에 대한 참조가 하나만 있는 것이 아닙니다. 여기서는 Deferred 함수가 사용됩니다. 75번째 줄에서는 jQuery 객체에 대한 ReadyList 멤버가 정의되어 있으며 이 변수는 binReady 함수에서 초기화됩니다. >



코드 복사


코드는 다음과 같습니다.readyList 초기화 외에도 IE에서는 이벤트 바인딩을 사용하는 브라우저와 addEventHandler를 사용하는 다른 브라우저 간의 차이점을 주로 처리합니다. 완료 후, ReadyList.resolveWith는 이 작업 외에도holdReady를 처리합니다. 이 API의 주요 목적은 무언가를 설정하는 것입니다. ReadyWait 플래그를 설정합니다. 이 플래그가 설정되면 Ready는 ReadyList.resolveWith를 호출하기 전에 setTimeout(jQuery.ready, 1)을 계속 호출합니다. 즉, 고정된 시간마다 자신을 재귀적으로 호출하므로(홀드 시간이 길면 js 엔진이 오버플로될지 모르겠습니다) 최종적으로 HoldReady에 의해 해제되면 setTimeout이 호출 스택을 따라 다시 돌아옵니다. 이 스택이 완료되기 전에 준비된 콜백 함수를 트리거하지 않기 위해. setTimeout이 호출될 때마다 ReadyWait 변수가 증가합니다. HoldReady 함수에 의해 지연된 호출 수를 나타내는 데 사용됩니다.


###여러 기본 보조 함수
543행부터 여러 가지 주목할만한 보조 함수(parseJSON, parseXML 및 globalEval)가 정의됩니다. parseJSON은 문자열을 JSON 객체로 변환합니다. 우리는 일반적으로 eval을 사용합니다. ParseJSON은 이 작업을 캡슐화하지만 eval은 최후의 수단으로 사용됩니다. 최신 JavaScript 표준에 JSON 직렬화 및 역직렬화 API가 추가되었기 때문입니다. 브라우저가 이 표준을 지원한다면 이 두 API는 Native Code를 사용하여 JS 엔진에 구현되며 효율성은 확실히 eval보다 훨씬 높습니다. 현재 Chrome과 Firefox4 모두 이 API를 지원합니다. ParseJSON은 다음과 같이 사용됩니다.



코드 복사


코드는 다음과 같습니다.
// Native JSON API. 역직렬화는 JSON.stringify(object) if(window.JSON && window.JSON.parse) { return window.JSON.parse(data); } // .. return (new Function("return " data))();

parseXML 함수도 주로 표준 API 및 IE의 패키지입니다. 표준 API는 DOMParser 개체입니다. IE는 Microsoft.XMLDOM의 ActiveXObject 개체를 사용합니다. 정의:




코드 복사

코드는 다음과 같습니다.
if(window.DOMParser) { tmp = new DOMParser(); xml = tmp.parseFromString(data, "text/xml") } else { xml = new ActiveXObject("Microsoft.XMLDOM"); 🎜>xml .async = "false"; xml.loadXML(data);
}


globalEval 함수는 전역 컨텍스트에 스크립트를 로드합니다. window.execScript는 IE에서 사용할 수 있습니다. 다른 브라우저에서는 eval을 사용해야 합니다. 전체 jQuery 코드는 전체 익명 함수이므로 현재 컨텍스트는 jQuery입니다. 주요 코드:




코드 복사

코드는 다음과 같습니다.

(window.execScript || function(data ) { window["eval"].call(window, data); // 창 컨텍스트에서 실행 })(data);
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.