4

私はさまざまな言語でプログラミングを行ってきました。最近、知り始める機会がありましたjQuery。私はコールバック関数について読んでいて、それが何を意味するのかを理解していました(特定の方法で次々と物事を行うため)。それらをネストされた関数と関連付けるかどうか少し混乱していますか? それは同じことではありませんか?概念をクリアするために助けてください。ありがとう。

4

3 に答える 3

4

コールバック関数は、操作が完了したときに呼び出される関数です。それがどこで定義されたかは実際には重要ではありません。ローカルスコープの関数、グローバルスコープの関数などを作成できます。

$.ajax例として使用すると、コールバックはどこにsuccessありますか?

function handleSuccess(data) {
   $(document.body).append(data);
}

function doAjaxCall() {
   $.ajax({url: 'some/path', success: handleSuccess });
}

機能的には次のものと同等です。

function doAjaxCall() {
   var handleSuccess = function(data) {
       $(document.body).append(data);
   }

   $.ajax({ url: 'some/path', success: handleSuccess });
}

機能的には次のものと同等です。

function doAjaxCall() { 
   $.ajax({ url: 'some/path', success: function(data) {
       $(document.body).append(data);
    }
   });
}
于 2012-05-21T09:12:30.270 に答える
1

コールバック関数は、コールバックを実行する単なる関数です。:)最初に呼び出す必要があります。これは実際には任意の操作です。次の例を検討してください。

$.ajax({
    url: '/test/'
});

このメソッドはサーバーを呼び出します。現在、操作は非同期です。サーバーがいつ応答するかはわかりません。しかし、どのようなデータが得られるかはわかっています。したがって、コールバック (サーバーが応答した後に実行する操作) を定義します。この場合、successコールバックを定義できます。

$.ajax({
    url: '/test/',
    success: function(res) {
        console.log(res);
    }
});

コールバックは非同期である必要はありません。この例を考えてみましょう

function test(data, callback) {
    if (callback && $.isFunction(callback))
        callback(data);
}

jQuery メソッドは が関数isFunctionかどうかのみをチェックcallbackします。今、あなたはtestこのように呼び出すことができます

test('test_string', function(str) {
   console.log(str);
});

2 番目の引数として渡される関数はコールバックです。

したがって、基本的にコールバックは、別の関数に引数として渡される関数に他なりません。主に非同期操作に使用されますが、それだけではありません (人生の例: forEachArray オブジェクトのメソッド)。

于 2012-05-21T09:21:10.820 に答える
1

間違っている場合は訂正してください。ただし、問題は次のとおりです。

$("#someDiv").fadeIn(200, function(){
        //do some stuff 
    });

vs

$("#someDiv").fadeIn(200, callbackFunction);
function callbackFunction()
{
    //do some stuff
}

(これをコメントではなく回答として投稿して申し訳ありませんが、コメントにはコード形式がありません)

于 2012-05-21T09:28:04.927 に答える