매개 변수로 기능을 다른 함수로 전달하십시오. 이 기능을 콜백 함수라고합니다
이 상황에서 프로젝트의 A와 B 계층이 협력하여 다른 직원이 완료하는 경우가 종종 있습니다. A 층은 기능 Funa를 담당하고 B 층은 funcb를 담당합니다. B 계층이 특정 모듈의 데이터를 사용하려면 A 레이어 직원에게 특정 요구 사항을 충족시키는 데이터를 제공해야한다고 말했고 인터페이스를 제공합니다.
레벨 A의 직원은 다음과 같이 말했습니다 : 저는 데이터를 제공 할 것입니다. 데이터와 처리 방법은 B의 비즈니스입니다.
물론 Layer B는 모든 요구 사항에 대한 데이터 인터페이스를 제공 할 수 없습니다. B는 A를 통과 할 인터페이스를 제공합니다. B는 데이터를 얻은 다음 B는이 기능을 표시하기 위해 함수를 작성합니다.
즉, 다른 사람과 협력해야하며 다른 사람들과 데이터를 제공해야하며 다른 사람들이 데이터를 얻거나 구축하는 방법에 집중할 필요가 없습니다. 당신은 당신이 얻는 데이터에서만 작동하면됩니다. 현재 콜백 함수를 사용해야합니다.
따라서 콜백은 본질적으로 설계 패턴이며 jQuery의 디자인 원칙 (다른 프레임 워크 포함) 은이 패턴을 따릅니다.
동기화 (차단)에서 콜백을 사용하는 예는 func1 코드가 실행 된 후 func2를 실행하는 것입니다.
코드 사본은 다음과 같습니다.
var func1 = function (콜백) {
// 무언가를합니다.
(Callback && typeof (콜백) === "function") && 콜백 ();
}
func1 (func2);
var func2 = function () {
}
비동기 콜백의 예 :
코드 사본은 다음과 같습니다.
$ (Document). Ready (콜백);
$ .ajax ({
URL : "test.html",
컨텍스트 : Document.body
}). done (function () {
$ (this) .addclass ( "done");
}). 실패 (function () {
경고 ( "오류");
}). 항상 (function () {
경고 ( "완료");
});
AJAX 요청은 실제로 비동기식이지만이 요청은 브라우저에서 요청합니다. 요청의 상태가 변경되면 콜백이 이전에 설정된 경우 비동기 스레드는 상태 변경 이벤트를 생성하여 JavaScript 엔진의 처리 대기열에 넣어 처리를 기다립니다. http://www.phpv.net/html/1700.html을 참조하십시오
언제 콜백이 실행됩니까?
콜백 함수는 일반적으로 동기식 상황에서 마지막으로 실행되지만 이벤트가 트리거되지 않거나 조건이 충족되지 않기 때문에 비동기 상황에서는 실행되지 않을 수 있습니다.
콜백 기능의 사용 사례
리소스로드 : 콜백 실행 JS 파일의 동적로드 후 콜백을 실행하고, Iframe을로드 한 후 콜백을 실행하고, AJAX 작동 콜백을로드 한 후 콜백을 실행하고, 이미지로드, AJAX 등 후에 콜백을 실행 한 후 콜백을 실행하십시오.
DOM 이벤트 및 node.js 이벤트는 콜백 메커니즘을 기반으로합니다 (Node.js 콜백에는 다층 콜백 중첩 문제가있을 수 있습니다).
Settimeout의 지연 시간은 0입니다.이 해킹은 종종 사용됩니다. settimeout이 호출하는 함수는 실제로 콜백 실시 예입니다.
체인 호출 : 체인 호출시 평가자 (Setter) 메소드 (또는 값을 반환하지 않는 메소드)에서 체인 호출을 쉽게 구현할 수 있지만 값 getter는이 포인터 대신 필요한 데이터를 반환하기 위해 값 getter가 필요하기 때문에 체인 호출을 구현하기가 비교적 어렵습니다. 체인 메소드를 구현하려면 콜백 함수를 사용하여 구현할 수 있습니다.
settimeout 및 setInterval의 함수 호출은 반환 값을 얻습니다. 두 기능 모두 비동기식이기 때문에, 즉 호출 타이밍과 프로그램의 주요 프로세스는 비교적 독립적이기 때문에, 신체의 반환 값을 기다릴 수있는 방법이 없으며, 프로그램이 열릴 때 멈추지 않고 기다리지 않을 것입니다. 그렇지 않으면 Settimeout과 SetInterval의 의미가 손실됩니다. 따라서 반환을 사용하는 것은 의미가 없으므로 콜백 만 사용할 수 있습니다. 콜백의 의미는시기 적절한 처리를 위해 타이머 실행 결과의 프록시 함수를 알리는 것입니다.
온라인으로 정보를 수집해야하며 이해해야합니다. 나는 혼자서 예를 정리하겠습니다.
코드 사본은 다음과 같습니다.
기능 재미 (num, 콜백) {
if (num <0) {
Alert ( "처리하려면 A 레벨 기능을 호출하십시오!");
경고 ( "데이터는 음수가 될 수없고 입력 오류!");
} else if (num == 0) {
Alert ( "처리하려면 A 레벨 기능을 호출하십시오!");
경고 ( "이 데이터 항목이 존재하지 않습니다!");
}또 다른{
Alert ( "B- 레벨 기능을 호출하여 처리하십시오!");
콜백 (1);
}
}
기능 test () {
var num = document.getElementById ( "score"). 값;
fun (num, function (back) {// 익명의 B- 레이어 처리 함수
경고 ( ":"+back);
if (num <2)
경고 ( "숫자는 1");
else if (num <= 3)
경고 ( "숫자는 2 또는 3입니다!");
또 다른
경고 ( "3보다 큰 숫자!");
})
}
함수가 재미를 실행하기 시작하면 먼저 NUM이 음수인지 0인지 0인지 결정하십시오. 그렇지 않으면 B- 레이어 처리 기능 경보를 실행합니다 ( ":"+back); 출력 1, <2, <= 3,> 3 등으로 결정하십시오.
경험 팁 :
콜백이 존재하고 함수 참조 또는 함수 표현식이어야하는지 확인하는 것이 가장 좋습니다.
코드 사본은 다음과 같습니다.
(Callback && typeof (콜백) === "function") && 콜백 ();
코드 사본은 다음과 같습니다.
var obj = {
init : 함수 (콜백) {
// TODO ...
if (Callback && typeof (Callback) === "function") && callback ()) {
콜백 ( 'init ...'); // 콜백
}
}
마지막으로 콜백 기능을 사용해야하는 이유는 무엇입니까? 다음의 은유는 매우 생생하고 흥미 롭습니다.
할 일이 있다면 다음 기숙사로 가서 급우를 찾아서 그 사람이 없다는 것을 알게되면 어떻게해야합니까?
방법 1 : 몇 분마다 다음 기숙사로 이동하여 사람이 있는지 확인하십시오.
방법 2 : 그와 같은 기숙사에있는 누군가에게 전화해서 그가 돌아 오는 것을 볼 때 전화하십시오.
전자는 여론 조사이며 후자는 콜백입니다.
그러면 반 친구들이 돌아올 때까지 옆집 기숙사에서 직접 기다릴 수 있습니까?
그렇습니다. 그러나 이런 식으로, 당신은 다른 일을하기 위해 시간을 절약 할 수 있었지만 이제는 기다릴 때 그것을 낭비해야합니다. 원래 비 차단 비동기 호출을 블록 동기 호출로 전환하십시오.
JavaScript 콜백은 비동기 통화 시나리오에서 사용되며 콜백 사용의 성능은 폴링보다 낫습니다.