JavaScriptコールバック関数とは

5121 ワード

何事もなく適当にjsのコールバック関数を書いて勉強したいことを助けたい(私はjsに接触する時間が長くなくて、コールバックに対する理解はやはり比較的に浅くて、間違いがあればみんなに感謝を指摘してほしい.){次のjavaインタフェースのコールバックを書く}
ここではまずいくつかの概念を導入します(baiduからの希望は皆さんに役に立ちます)
*関数もオブジェクト
コールバック関数を理解するには,まず関数のルールを明確に理解する.javascriptでは、関数はおかしいですが、確かにオブジェクトです.正確には、関数はFunction()コンストラクション関数で作成されたFunctionオブジェクトです.functionオブジェクトには、関数のjavascriptコードを含む文字列が含まれます.もしあなたがC言語やjava言語から回ってきたら、これは変に見えるかもしれませんが、コードは文字列ではありませんか?しかしjavascriptにとっては普通です.データとコードの違いはあいまいです.
//        
var fn = new Function("arg1", "arg2", "return arg1 * arg2;");
fn(3, 7); // return 3*7=21

このような利点の1つは、コードを他の関数に渡すことも、正規変数やオブジェクトを渡すこともできます(コードの字面はオブジェクトにすぎないため).
*コールバックとして関数を渡す
1つの関数をパラメータとして簡単に渡すことができます.
function fn(arg1, arg2, callback){
 var num = Math.ceil(Math.random() * (arg1 - arg2) + arg2);
 callback(num);  //    
}
 fn(10, 20, function(num){
 console.log("Callback called! Num: " + num);  //   10 20       
});   

このようにするのは面倒で、少し愚かに見えるかもしれませんが、なぜ正常に結果に戻りませんか?しかし、コールバック関数を使用しなければならない場合は、そう思わないかもしれません.従来の関数はパラメータ形式でデータを入力し、戻り文を使用して値を返します.理論的には、関数の最後にreturn戻り文があり、構造的には入力点と出力点です.これは比較的容易に理解でき,関数は本質的に入力と出力の間の実現過程のマッピングである.しかし、関数の実装プロセスが非常に長い場合、関数の完了処理を待つか、コールバック関数を使用して非同期処理を行うかを選択します.この場合、コールバック関数の使用が重要になります.たとえば、AJAXリクエストなどです.コールバック関数を使用して処理すると、コードは空などを必要とせずに他のタスクを続行できます.実際の開発ではjavascriptで非同期呼び出しをよく使用していますが、ここでも強くお勧めします!
*コールバックは何ですか?
ウィキのCallbackを見て(computer_programming)エントリ:
In computer programming, a callback is a reference to a piece of executable code that is passed as an argument to other code.
jQueryドキュメントHow jQuery Works#Callback_and_Functio...項目:
A callback is a function that is passed as an argument to another function and is executed after its parent function has completed. The special thing about a callback is that functions that appear after the "parent"can execute before the callback executes. Another important thing to know is how to properly pass the callback. This is where I have often forgotten the proper syntax.
baidu百科:コールバック関数
コールバック関数は、関数ポインタによって呼び出される関数です.関数のポインタ(アドレス)をパラメータとして別の関数に渡す場合、このポインタがその指す関数を呼び出すために使用される場合、これはコールバック関数です.コールバック関数は、その関数の実装者によって直接呼び出されるのではなく、特定のイベントまたはアイテムが発生したときに別の方によって呼び出され、そのイベントまたは条件に応答するために使用されます.*******(真剣に)従って,コールバックは本質的に設計モードであり,jQuery(他のフレームワークを含む)の設計原則はこのモードに従っている.JavaScriptでは、コールバック関数は、関数Aがパラメータ(関数参照)として別の関数Bに渡され、この関数Bが関数Aを実行するように具体的に定義される.関数Aをコールバック関数と呼ぶ.名前(関数式)がない場合は、匿名コールバック関数と呼ばれます.したがってcallbackは必ずしも非同期に使用されるわけではなく、一般的に同期(ブロック)されたシーンでもコールバックがよく使用されます.たとえば、いくつかの操作を実行した後にコールバック関数を実行する必要があります.例1同期(ブロック)でコールバックを使用する例で、func 1コードの実行が完了した後にfunc 2を実行することを目的とする.
var func1=function(callback){
  //do something.
  (callback && typeof(callback) === "function") && callback();
 }
  var func2=function(){ } 
  func1(func2);


非同期ajaxコールバックの例
   $.ajax({
                    type: "POST",
                    url: url,
                    data: {"key":JSON.stringify(),  } ,
                    success:function(data){
                       //success  
                   },
                    error:function(data){
                   //error  
                    }
                });


なお、ajaxリクエストは確かに非同期ですが、このリクエストはブラウザによって新しくスレッドリクエストが開かれ、リクエストのステータス変更時にコールバックが設定されている場合、この非同期スレッドはステータス変更イベントを生成してJavaScriptエンジンの処理キューに格納して待機します.
今日書いたコールバックコードを貼り付けます~~~



    
    BlackWingJsCallBackFunctionTest








    var callbackF;
    var questionTest1="1+1";
    var questionTest2="what are you doing?";
    function asyn(question,callBack,type)
    {
      console.log("asyn:\t    asyn,         "+question+",      ")


      if(type==1)
      {

          console.log("asyn:\t   1+1=2")
           answer=2;
      }else if(type==2)
      {
          console.log("asyn:\t        ,        (         )")
           answer="        ,        (         )"
      }
      if(typeof callBack=="function")
      {
          callBack(answer)
      }else {
          console.log("asyn:\tcallback  function      ")
      }
    }
    function b(answer){
        console.log("b:\t         "+answer);
        callbackF();
    }
    function c(answer){
        console.log("c:\t         "+answer);
        callbackF();
    }
    function test1() {
        console.log("test1:\t  asyn,      ,     b")
        asyn(questionTest1,b,1);
    }
    function test2() {
        console.log("test2:\t  asyn,what are you doing?,   c")
        asyn(questionTest2,c,2);
    }
    function test3() {
        console.log("test3:\t  asyn,        function");
        asyn("1+1","...",3)
    }
    $(function(){
        callbackF = function(){
            console.log("callbackF:\t      callbackF");
        }
    });