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()是函数的返回值。如果你想获得更多的函数参数。使用参数对象 每个函数都有一个参数对象 arguments[0] == 1 arguments[1] == 2 arguments[2] == add。

于 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()),在第二种情况下,它不是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 回答