2


    function abc(arg1,arg2, callback){
        console.log(arg1 + arg2) // I am doing something really interesting
        if(callback){
        callback(arg1+ arg2)
        }
    }
    function add(){
            console.log("from call back " + arguments[0])
    }

    var a =10;
    abc(1,2, add)


これは問題なく動作しますが、コールバックに追加の引数を送信する必要がある場合はどうすればよいでしょうか??
ここでは、の呼び出し元からコールバック (arg1+ arg2)に設定する他の引数が必要です。そして、 と の違いは何ですか?? ありがとう :)abc
abc(1,2,add)abc(1,2,add())

4

4 に答える 4

5
  • abc(1,2,add)=> 関数の引数を「関数型」として与える。これは、後で呼び出すために関数へのポインターを与えるようなものです。

  • abc(1,2,add())=> 関数を呼び出し、add()その戻り値を引数として渡します。

コールバックが引数以上のものをサポートする必要がありますか? JavaScript は動的言語であるため、より多くの引数を指定して同じコールバック関数を呼び出すだけです。

  • callback(1,2,3,4)
  • callback(1,2,3,4,5)
  • callback(1,2,3,4,5,6).

JavaScript は関数シグネチャに厳密ではありません。関数には、呼び出し元が指定した数の引数があります。

たとえば、次のようなコールバック関数があるとします。

function(a, b) {

}

そして、後で次のように呼び出します。

function("hello"); // Where's the second argument??

JavaScript は文句を言いません。単にb未定義になります。

于 2012-12-21T07:23:43.793 に答える
1

add と add() の違い: add は関数であり、add() は関数の戻り値です。関数の引数をさらに取得したい場合。引数オブジェクトを使用する すべての関数には引数オブジェクトがあります。 引数[0] == 1 引数[1] == 2 引数[2] == 追加します。

于 2012-12-21T07:23:40.097 に答える
1

元の関数のパラメーターを使用してコールバックを呼び出すことができます。また、関数呼び出し内でコールバックのパラメーターを提供することもできます。

function f1 (args, callback, params) {
    callback.apply(this, params); // Params needs to be an array
    callback.apply(this, [args]); // This would call callback with 1 param - args
    callback.call(this, args); // This is the same as the line above
}

function f2 () {
    for (item in arguments) {
        console.log(item);
    }
}

f1('arg', f2, [1, 2, 3]);

パラメータ内の関数呼び出しで関数を呼び出すと、すぐに評価され、コールバックとして実行されません。

于 2012-12-21T07:28:26.790 に答える
0

abc(1,2,add)との違いはabc(1,2,add())、2番目のケースでは、abcを呼び出すことではないということaddです。その結果add、予想よりもはるかに早く実行され、引数はありません。

追加のパラメーターをコールバックに渡す通常の方法は、パラメーターを閉じる匿名関数を作成することです。

var a=10;
var b=20;
abc(a, b, function(text){
  add(a, b);
  console.log(text); //logs "abc"
});
于 2012-12-21T07:29:19.933 に答える