-1

これは簡単な質問です。これが私のコードです:

$(document).ready( function () {

    func1( "foo", callback);

    function callback(param){
        alert(param+" is my name");
    }

    function func1(name, cb) {
        cb(name);        // alerts "foo is my name"
        callback("bar"); // alerts "bar is my name"
    }
});

私は知りたいです:

  • 内部の関数呼び出しのどれfunc1が正しいcallbackですか? またその理由は?
  • それともどちらも正しいですか?
  • callback("bar");通常の関数呼び出しではありませんか?
4

4 に答える 4

2

コールバックは、関数の実行の定義された時点で関数が何をすべきかを呼び出し元が指定できるようにするためのものです。呼び出される関数は、事前にそのコールバック関数の名前を知っているべきではありません。したがって、それらは引数として関数に渡されることが多く、コールバックを呼び出すはずの関数はその引数を呼び出すだけです。

を呼び出すcallback("bar")func1、コールバックのポイントが完全に失われます。たまたまコールバックとして使用している関数を呼び出している可能性がありますが、コールバックのポイントは、それfunc1について知っているはずがないということです。引数として渡された関数を呼び出すだけです(cb)。私が呼び出しているときはfunc1、完全に異なるコールバック関数を渡すことができるはずでありfunc1、その名前が何であるかを知らずにその関数を呼び出す必要があります (名前がない場合もあります!)。

「正しい」方法はcb(name).

于 2013-07-25T20:58:26.153 に答える
1

最初の1つ。関数は、パラメーターとして渡された別の関数を呼び出します。

于 2013-07-25T20:49:37.600 に答える
1

callback("bar");cb(name);に渡された参照を呼び出すコールバック関数を直接呼び出していますfunc1

cb(name);ここで正しい方法のようです。

于 2013-07-25T20:44:21.003 に答える
0

ほとんどのjqueryメソッドは、コールバックのためにこの形式に従うようです:

 $(SUBJECT).method(function() {
     //do stuff
 }, /*callback here*/ function(){
    //do stuff
 });

たとえば

$(foo).click(function() {
      $(bar).fadeIn(300, function(){
         //call back here
      });
 });

フィドル

于 2013-07-25T20:52:04.173 に答える