ホームページ  >  記事  >  ウェブフロントエンド  >  javascript_javascript スキルのコールバック関数 (callback) を理解する

javascript_javascript スキルのコールバック関数 (callback) を理解する

WBOY
WBOYオリジナル
2016-05-16 16:37:551234ブラウズ

最近 Express を見ていて、関数をパラメーターとして受け取るコールバック関数の使用をいたるところで見ました。この概念を理解していないと、nodejsやexpressのコードがめちゃくちゃになってしまいます。例:

コードをコピー コードは次のとおりです:

app.use(function(req, res, next) {
var err = 新しいエラー('見つかりません');
err.status = 404;
次(エラー);
});

app はオブジェクト、use はメソッド、メソッドのパラメータはパラメータを持つ匿名関数で、関数本体は最後に直接指定されます。このコードをどう理解すればいいでしょうか?まずはコールバック関数の概念を理解しましょう。
まず、js では関数もオブジェクトであり、変数に代入したり、関数のパラメーター リストにパラメーターとして配置したりできることを理解する必要があります。例:
コードをコピー コードは次のとおりです:

var doSomething = function(a,b)
{
b を返します;
}

このコードの意味は、匿名関数を定義することです。この匿名関数には名前がない点が異なり、通常の関数と変わりません。次に、匿名関数を変数 doSomething に割り当てます。次に、
を呼び出します。
コードをコピー コードは次のとおりです:

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

これは 5 を出力します。

コールバック関数は、別の関数 (親など) のパラメーター リストに配置され、パラメーターとしてこの親に渡され、親関数本体のどこかで実行されます。抽象的なので、例を見てみましょう:

コードをコピー コードは次のとおりです:

// コールバックの概念を説明するため
var doit = 関数(コールバック)
{
var a = 1,
b = 2、
c = 3;
var t = callback(a,b,c);
t 10 を返します;
};
var d = doit(function(x,y,z){
リターン (x y z);
});
console.log(d);

まず、パラメーター コールバックを持つ doit 関数を定義します。このコールバックはコールバック関数であり、名前は任意です。関数本体を見ると、まず 3 つの変数 a、b、c を定義します。次に、コールバック関数を呼び出します。最後に値を返します。

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

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

doit 関数を呼び出します。パラメータは匿名関数です。doit の関数本体を入力し、最初に a、b、c を定義してから、今匿名関数を実行します。パラメータは a、b、c、return です。 a t、そして最後に A t 10 を返すと d が得られます。

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

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

終わりました!

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