我们可以用参数给出回调吗?

时间:2012-12-21 07:18:33

标签: javascript callback arguments


    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 个答案:

答案 0 :(得分: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将是未定义的。

答案 1 :(得分:1)

add和add()之间的区别: add是一个函数,add()是函数的返回值。 如果你想获得更多的函数参数。使用arguments对象 每个函数都有一个参数对象 arguments [0] == 1参数[1] == 2参数[2] == add。

答案 2 :(得分: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]);

如果你通过函数调用函数调用你的函数,那么它会立即进行评估,并且不会作为回调执行。

答案 3 :(得分:0)

abc(1,2,add)abc(1,2,add())之间的区别在于,在第二种情况下,调用abc的{​​{1}}不是add。结果是add比预期更快地执行,没有任何参数。

将额外参数传递给回调的常用方法是创建一个关闭参数的匿​​名函数:

var a=10;
var b=20;
abc(a, b, function(text){
  add(a, b);
  console.log(text); //logs "abc"
});