javascript_javascript 스킬의 콜백 함수(콜백) 이해

WBOY
풀어 주다: 2016-05-16 16:37:55
원래의
1235명이 탐색했습니다.

최근에 Express를 보다가 함수를 매개변수로 사용하는 콜백 함수를 곳곳에서 봤습니다. 이 개념을 이해하지 못하면 nodejs와 express의 코드가 엉망이 될 것입니다. 예:

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

app.use(function(req, res, next) {
var err = new Error('찾을 수 없음');
err.status = 404;
다음(err);
});

app은 객체이고, use는 메소드이고, 메소드의 매개변수는 매개변수가 있는 익명 함수이며, 함수 본문은 끝에 직접 제공됩니다. 이 코드를 이해하는 방법은 무엇입니까? 먼저 콜백 함수의 개념을 이해해 봅시다.
우선, js에서 함수는 변수에 할당될 수 있고 함수의 매개변수 목록에 매개변수로 배치될 수 있는 객체이기도 함을 이해해야 합니다. 예:
코드 복사 코드는 다음과 같습니다.

var doSomething = 함수(a,b)
{
b를 돌려주세요;
}

이 코드의 의미는 익명 함수를 정의하는 것입니다. 이 익명 함수에는 이름이 없다는 점만 제외하면 일반 함수와 다르지 않습니다. 그런 다음 익명 함수를 doSomething 변수에 할당합니다. 다음으로 호출할 내용은 다음과 같습니다.
코드 복사 코드는 다음과 같습니다.

console.log(doSomething(2,3));

이렇게 하면 5가 출력됩니다.

콜백 함수는 다른 함수(예: 상위)의 매개변수 목록에 배치되고 이 상위에 매개변수로 전달된 다음 상위 함수 본문의 어딘가에서 실행됩니다. 추상적입니다. 예를 살펴보겠습니다.

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

// 콜백의 개념을 설명하기 위해
var doit = ​​​​함수(콜백)
{
var a = 1,
         b = 2,
c = 3;
var t = 콜백(a,b,c);
10시 반납;
};
var d = doit(함수(x,y,z){
반환(x y z);
});
console.log(d);

먼저 매개변수 콜백이 있는 doit 함수를 정의합니다. 이 콜백은 콜백 함수이며 이름은 임의로 지정할 수 있습니다. 함수 본문을 살펴보면 먼저 변수 a, b, c 세 개를 정의합니다. 그런 다음 콜백 함수를 호출합니다. 마지막으로 값을 반환합니다.

아래에서는 doit 함수를 호출합니다. 참고로 지금 막 doit을 정의했을 때는 콜백이 정의되어 있지 않아 콜백이 어떤 용도로 사용되는지 알 수 없었다. 이는 사실 이해하기 쉽습니다. 일반적으로 함수를 정의할 때 매개변수에는 a와 같은 이름만 부여하고, 함수 본문에서는 a를 사용하지만, 전체 프로세스는 그것을 호출할 때만 a가 무엇인지 알지 못합니다. function 그런 다음 a의 특정 값(예: 2)을 지정합니다. 돌이켜 보면 doit을 호출할 때 콜백이 무엇인지 지정해야 합니다. 보시다시피 이 함수는 합계 함수를 완성합니다.

위 코드의 실행 과정은 다음과 같습니다.

doit 함수를 호출합니다. 매개변수는 익명 함수입니다. doit의 함수 본문을 입력하고 먼저 a, b, c를 정의한 다음 방금 익명 함수를 실행합니다. 매개변수는 a, b, c이고 반환됩니다. a t, 그리고 마지막으로 A t 10을 반환하면 d가 제공됩니다.

원래 예로 돌아가서 app.use(...)는 함수 호출입니다. use 메소드가 이전에 정의되었음에 틀림없다고 생각할 수 있지만 여기서는 제공되지 않습니다. 이 두 가지 예를 비교해보면 바로 이해할 수 있습니다.

nodejs와 express를 사용할 때 모든 메소드나 함수의 함수 정의를 찾아서 살펴보는 것은 불가능합니다. 따라서 해당 정의에서 콜백에 어떤 매개변수가 전달되는지 알아보세요. 그런 다음 메소드나 함수를 호출할 때 특정 기능을 완성하기 위해 매개변수에 익명 함수를 직접 정의합니다.

끝!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿