コールバック関数|コアJavaScript 4

5442 ワード

コールバック関数


他のコードパラメータに渡される関数.
要求を受け取った後、自分で操作を実行し、適切な時間に自発的に通知する.
->制御権をパラメータとして他のコード(関数またはメソッド)の関数に渡します.

コールバック関数のオーバーフロー制御

  • コールポイント
  • は、パラメータ値
  • をどのような順序で伝達するかを示す.
  • この目標
  • を指定する.

    コールバック関数は関数です


    コールバック関数を使用してオブジェクトを渡す方法を使用すると、メソッドではなく関数として呼び出されます.
    本人が主張するオブジェクトとの直接的な関連が消えたため,この関数が指す点が変化した.

    コールバック関数でthisに別の値をバインドする


    コールバック関数でこのオブジェクトを表示する方法

    エンクロージャの作成方法


    従来の方法は、変数を使用するのではなく、コールバック関数として別の変数に入れることです.
    let obj = {
      name : 'obj1',
      func : function() {
        let self = this;
        return function() {
          console.log(self.name);
        }
      }
    }
    let callback = obj1.func();
    setTimeout(callback, 1000);

    bindの使い方

    let obj = {
      name : 'obj1',
      func : function() {
        return function() {
          console.log(this.name);
        }
      }
    }
    let callback = obj1.func.bind(obj1);
    setTimeout(callback, 1000);

    コールバック地獄と非同期制御


    callback地獄?


    コールバック関数を匿名関数に渡すプロセスを繰り返し、コードのインデント深さに耐えられない
    JavaScriptの非同期タスクの処理中に発生します.

    非同期vs同期


    非同期:現在実行中のコードが完了しているかどうかにかかわらず、すぐに次のコードにジャンプします.要求、実行待ち、保留など
    ≪同期化|Synchronize|oem_src≫:現在実行中のコードが完了してから、次のコードが実行されます.即時処理

    カルバック地獄を解決する方法



    伝達値の順序が下から上になるため,コードを自然に解釈することは困難である.

    記名関数に変換



    Promise



    コールバック関数は呼び出し時にすぐに実行されますが、resolveまたはexecute関数を呼び出す構文がある場合は、1つの関数を実行する前に次の(その後)またはcatch構文に移動しません.

    Generator



    Generator関数を実行すると、nextというメソッドを持つ奇形が返されます.このnextメソッドを呼び出すと、関数は最初に表示された最終品目で停止します.非同期タスクを順番に実行できます.

    Promise + Async/await



    このようにコルバー地獄を脱出する方法はたくさんありますが、
    可読コードは、可能な限り順番に記述される.