ホームページ >ウェブフロントエンド >jsチュートリアル >js がコールバックするのはなぜですか?

js がコールバックするのはなぜですか?

little bottle
little bottleオリジナル
2019-05-31 13:20:312360ブラウズ

JavaScript では、関数は第一級のオブジェクトです。これは、第一級の管理に従って関数をオブジェクトのように使用できることを意味します。関数は実際にはオブジェクトであるため、変数に「格納」したり、関数パラメーターとして渡したり、関数内で作成したり、関数から返すことができます。関数はファーストクラスのオブジェクトであるため、JavaScript でコールバック関数を使用できます。コールバックについて一緒に学びましょう。

js がコールバックするのはなぜですか?

#簡単に言うと、コールバックとは、別の関数の実行が完了した後に呼び出される関数のことを指します。

これは、もう少し複雑 率直に言うと、JavaScript では関数もオブジェクトです。したがって、関数をパラメータとして関数に渡すことも、他の関数によって返すこともできます。

このような関数を高階関数と呼びます。パラメータとして渡される関数はコールバック関数と呼ばれます。

なぜコールバックが必要なのかについて話しましょう。

非常に重要な理由があります。JavaScript はイベント駆動型言語です。これは、JavaScript が応答を待っている間も実行を停止せず、他のイベントをリッスンしている間も実行を継続することを意味します。

基本的な例を見てみましょう:

function first(){
  console.log(1);
}
function second(){
  console.log(2);
}
first();
second();

ご想像のとおり、最初の関数が最初に実行され、次に 2 番目の関数が実行されます。コンソールには次が出力されます:

// 1
// 2

しかし、関数にすぐには実行できないコードが最初に含まれている場合はどうなるでしょうか?

たとえば、リクエストを送信してから応答を待つ必要がある API リクエストですか?この状況をシミュレートするには、一定期間後に関数を呼び出す JavaScript 関数である setTimeout を使用します。 API リクエストをシミュレートするために関数を 500 ミリ秒遅延させます。新しいコードは次のようになります:

function first(){
// 模拟代码延迟
  setTimeout( function(){
console.log(1);
  }, 500 );
}
function second(){
  console.log(2);
}
first();
second();

setTimeout() がどのように機能するかを理解することは重要ではありません。 have console.log( 1); 500 秒の遅延関数内に移動されました。では、この関数が呼び出されると何が起こるでしょうか?


first();
second();
// 2
// 1

first() 関数を最初に呼び出したとしても、記録する出力は Second() 関数の後にあります。

これは、JavaScript が必要な順序で関数を実行しないという問題ではなく、JavaScript が Second() に進む前に first() の応答を待たないという問題です。

それでは、なぜこれを見せているのでしょうか?

関数を次々に呼び出して、それらが正しい順序で実行されることを期待することはできないからです。

コールバックは、まさに、あるコードが別のコードが実行される前に確実に実行されるようにする方法です。

以上がjs がコールバックするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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