>  기사  >  웹 프론트엔드  >  함수를 매개변수로 하는 자바스크립트 콜백 함수의 사용법에 대한 자세한 설명

함수를 매개변수로 하는 자바스크립트 콜백 함수의 사용법에 대한 자세한 설명

伊谢尔伦
伊谢尔伦원래의
2017-07-25 14:55:531506검색

express는 함수를 매개변수로 사용하는 콜백 함수를 사용합니다. 이 개념을 이해하지 못하면 nodejs와 express의 코드가 엉망이 될 것입니다. 예:

app.use(function(req, res, next) {
    var err = new Error('Not Found');
    err.status = 404;
    next(err);
});

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

var doSomething = function(a,b)
{
 return a + b;
}

이 코드는 익명 함수를 정의한다는 의미입니다. 이 익명 함수에는 이름이 없다는 점만 제외하면 일반 함수와 다르지 않습니다. 그런 다음 익명 함수를 doSomething 변수에 할당합니다. 다음으로

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

를 호출하면 5가 출력됩니다.

콜백 함수는 다른 함수(예: 부모)의 매개 변수 목록에 배치되고 이 부모에 매개 변수로 전달된 다음 부모 함수 본문의 어딘가에서 실행됩니다. 추상적으로 말하면 다음 예를 살펴보세요.

// To illustrate the concept of callback
var doit = function(callback)
{
    var a = 1,
        b = 2,
        c = 3;
    var t = callback(a,b,c);
    return t + 10;
};
var d = doit(function(x,y,z){
    return (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 이고 t를 반환하고 마지막으로 d에 t+10을 반환합니다.

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

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

위 내용은 함수를 매개변수로 하는 자바스크립트 콜백 함수의 사용법에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.