ホームページ  >  記事  >  ウェブフロントエンド  >  関数をパラメータとしたJavaScriptコールバック関数の使い方の詳細な説明

関数をパラメータとしたJavaScriptコールバック関数の使い方の詳細な説明

伊谢尔伦
伊谢尔伦オリジナル
2017-07-25 14:55:531510ブラウズ

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 関数を定義します。このコールバックはコールバック関数であり、名前は任意です。関数本体を見ると、まず 3 つの変数 a、b、c を定義します。次に、コールバック関数を呼び出します。最後に値を返します。

次に doit 関数が呼び出されます。なお、先ほど doit を定義した時点では callback が定義されていなかったので、何に callback を使うのか分かりませんでした。これは実際に理解するのが簡単です。通常、関数を定義するときは、パラメーターに a などの名前が付けられ、関数本体で a が使用されますが、それを呼び出すときだけ、プロセス全体は a が何であるかを知りません。 function その後にのみ、a の特定の値 (2 など) を指定します。振り返ってみると、doit を呼び出すときに、コールバックが何であるかを指定する必要があります。ご覧のとおり、この関数は合計関数を完成させます。

上記のコードの実行プロセスは次のとおりです:

doit 関数を呼び出します。パラメータは匿名関数です。doit の関数本体を入力し、最初に a、b、c を定義してから、先ほどの匿名関数を実行します。パラメータは a、b、c で​​、t を返し、最後に t+10 から d を返します。

元の例に戻ると、app.use(...) は関数呼び出しです。 use メソッドが以前に定義されているはずだと想像できますが、ここでは説明しません。これら 2 つの例を比較すると、すぐに理解できます。

nodejs や Express を使用する場合、すべてのメソッドや関数の関数定義を見つけて確認することは不可能です。したがって、その定義でコールバックにどのパラメータが渡されるかを知っておくだけで済みます。次に、メソッドまたは関数を呼び出すときに、パラメータで匿名関数を独自に定義して、特定の関数を完成させます。

以上が関数をパラメータとしたJavaScriptコールバック関数の使い方の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。